Вы были на правильном пути с вашим кодом.
- Вам нужно только позвонить
rej(err)
, если на самом деле есть ошибка
- Вы не должны пытаться совместно использовать один и тот же объект параметров для всех ваших запросов (которые могут вызывать или не вызывать проблемы)
- Вам нужно объявить
promises
в более высоком объеме, где его можно использовать с Promise.all(promises)
:
Вот как это выглядело бы после исправления этих проблем:
const stocks = require('./stocks.json')
const request = require("request");
let promises = [];
let stockTickers = stocks.map(x => x.stockopediaTicker);
stockTickers.forEach(ticker => {
let todaysQuote = new Promise(function (res, rej) {
let options = {
method: 'GET',
url: 'https://www.stockopedia.com/ajax/get_prices/' + ticker + '/'
};
request(options, function (error, response, body) {
if (error) {
rej(error);
} else {
res(body);
}
});
})
promises.push(todaysQuote)
});
Promise.all(promises)
.then((results) => {
console.log(results);
}).catch(err => console.log(err))
Модуль запроса-обещания проще в использовании, поскольку в него уже включена оболочка обещания, и, вероятно, проще использовать .map()
для накопления массива обещаний.
const stocks = require('./stocks.json')
const rp = require("request-promise");
Promise.all(stocks.map(x => {
let options = {
method: 'GET',
url: 'https://www.stockopedia.com/ajax/get_prices/' + x.stockopediaTicker + '/'
};
return rp(options);
})).then(results => {
console.log(results);
}).catch(err => {
console.log(err);
});