Javascript 如何在async.each中使用NodeJ强制执行请求?
我有一个async.each,它迭代一个数组,并对数组中的每个元素执行一个函数“check”,该函数内部有一个请求。这是代码,但是当我运行它时,我从调试器中看到节点没有执行check函数,并且它阻止了它的执行Javascript 如何在async.each中使用NodeJ强制执行请求?,javascript,node.js,foreach,async.js,requestjs,Javascript,Node.js,Foreach,Async.js,Requestjs,我有一个async.each,它迭代一个数组,并对数组中的每个元素执行一个函数“check”,该函数内部有一个请求。这是代码,但是当我运行它时,我从调试器中看到节点没有执行check函数,并且它阻止了它的执行 async.each(array, function(v_page, callback){ if(v_page.url.length>=5){ internals.check(v_page.url,array2, function (body) {
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函数以了解节点的异步性质。那么如何强制执行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
}
...
谢谢,我添加了它,但没有改变,最重要的是我没有解决问题。。。它不执行check函数。更新了答案,你在
内部有一个bug。check
函数。好的,我修复了回调bug,但是从调试器中我看到它进入了check函数,当它到达请求时,它跳到函数的末尾,所以它看不到回调。我认为这就是问题所在。当然,它会跳到最后,因为请求是“异步”函数,它会立即返回,然后在加载数据时调用回调。所以没有任何解决方案?
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
}
});
};