Ошибка только обратного вызова в модуле async npm - PullRequest
0 голосов
/ 29 апреля 2018

Я использую этот 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;
        });
    }
});

1 Ответ

0 голосов
/ 06 мая 2018

Как указывает @ generalhenry , я смог получить prices с помощью async.map, который возвращает первый обратный вызов с ошибкой, а не только ошибку, за исключением того, что async.series может использоваться здесь немного изменение кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...