javascript - 异步 npm 模块中的错误回调
问题描述
我正在使用这个异步模块在另一个模块request的帮助下异步请求 Web 内容,因为这是一个异步调用。使用async.each方法,从每个链接请求数据,结果也由scrap()
函数成功返回(我已经写了废弃返回的 html 数据并将其作为燃料价格数组按状态返回)。
现在,问题是当我尝试将价格返回到async.each()
usingcb(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指出的那样,我能够prices
通过使用async.map
which 返回错误第一个回调而不是错误来获得,除了async.series
可以通过稍微更改代码在此处使用之外。
推荐阅读
- android - NesteadScrollView 内的 ConstraintLayout 裁剪底部元素
- javascript - react-native:如何使用自动完成进行搜索过滤。这是我的样本
- ios - 应用强制获取节点位置后的ARKit
- php - PHP 连接到 MySQL
- git - 如何成为 Yii2 贡献者?
- c# - 屏幕截图安全桌面
- javascript - 递归调用如何在函数中工作?
- excel - 粘贴后不显示日期
- laravel-5.6 - 有什么办法可以在 laravel 中从 $request->all() 中排除空字段?
- android - 离子 android:navigationBarColor