Я использую этот async модуль для асинхронного запроса
веб-контент с помощью другого модуля request , так как это асинхронный вызов.
Используя async.each метод, для запроса данных из каждой ссылки,
результат также успешно возвращается функцией scrap()
(которую я написал для извлечения возвращенных данных html
и вернуть его как массив цен на топливо по штатам).
Теперь проблема в том, что когда я пытаюсь вернуть цены обратно к async.each()
, используя cb(null, prices)
, он показывает console.log(prices)
как undefined
но входя в систему внутри _check_fuel_prices()
, работает нормально. Кажется, что обратный вызов работает только с одним аргументом
(или обратный вызов только с ошибкой, как показано в примере в ссылке async.each
выше). Что делать, если я хочу, чтобы это возвращало цены (я могу изменить это с ошибкой как cb(prices)
, но я также хочу регистрировать ошибку).
router.get('/someRoute', (req, res, next) => {
const fuels = ['diesel', 'petrol'];
async.each(fuels, _check_fuel_prices, (err, prices) => {
if (!err) {
res.statusCode = 200;
console.log(prices);
return res.json(prices);
}
res.statusCode = 400;
return res.json(err);
});
function _check_fuel_prices(fuel, cb) {
let prices = '';
const url_string = 'http://some.url/';
request(`${url_string}-${fuel}-price/`, (error, response, html) => {
if (error) {
cb(error, null);
return;
}
if (response.statusCode === 404) {
console.log(response.statusCode);
cb('UNABLE TO FIND PAGE', null);
return;
}
prices = scrap(html, fuel);
console.log(prices);
cb(null, prices);
return;
});
}
});