javascript - 异步 npm 模块中仅错误回调

标签 javascript node.js asynchronous

我正在使用这个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;
        });
    }
});

最佳答案

@generalhenry指出,我能够通过使用 async.map 获取prices,它返回错误第一个回调,而不是仅返回错误 async.series > 稍微修改一下代码就可以在这里使用。

关于javascript - 异步 npm 模块中仅错误回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50087750/

相关文章:

http - 使用 express.js 进行路由 - 无法获取错误

javascript - 同步调用(等待 ad.authenticate)

node.js - 如何将不同请求的响应与nodejs和请求放在同一个文档中?

javascript - 将 $.getJSON 与 jsonp 一起使用时,Sinon.js fakeServer.request.respond 失败

javascript - 打开弹出窗口时,网页不会切换标签。其他页面无法打开

javascript - 如何处理由 javascript 添加的元素的事件?没有 .on() jQuery?

c# - 在 UWP 应用程序中,如何重现异常,告知仅在非 UI 线程上允许同步 UI

javascript - 为什么此幻灯片不以我的页面为中心?

node.js - npm 脚本的时间/性能指标

javascript - 为什么要执行这个函数?