![](/img/trans.png)
[英]How to call async.each in an external function having async.waterfall inside async.each
[英]how to force execution of requests inside async.each with nodejs?
我有一个async.each迭代一个数组,对于数组中的每个元素,它执行一个函数“check”,里面有一个请求。 这是代码,但是当我运行它时,我从调试器看到节点不执行检查功能并阻止其执行。
async.each(array,
function(v_page, callback){
if(v_page.url.length>=5){
internals.check(v_page.url,array2, function (body) {
callback();
});
}
},
function(err){
internals.calls(var1,var2,var3);
});
我尝试使用普通的for循环,但它跳转到internals.calls函数而不执行internals.check函数以获得节点的异步性质。 那么如何强制执行检查功能呢?
这是检查功能的代码:
internals.check = (url,array2,cb) => {
request(url, function(err, recordset) {
if(err){
cb(array2);
}else {
//some stuffs
cb(array2)
}
});
};
只有当v_page.url.length >= 5
时才调用callback
,但是你需要为每个元素执行此操作:
async.each(array, function(v_page, callback) {
if(v_page.url.length >= 5) {
internals.check(v_page.url,array2, function(body) {
callback();
});
} else {
callback(); <== call callback here, when condition is not met
}
...
另一个问题是,您在internals.check
错误地调用了回调。 根据Node.js表示法,回调的第一个参数必须是错误或null(异步使用此表示法)。 但是在你的情况下你无论如何都用array2
调用回调:
internals.check = (url, array2, cb) => {
request(url, function(err, recordset) {
if (err) {
cb(err); // <== pass error here
} else {
cb(null, array2); // <== no error, so first parameter is null, the second is data
}
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.