Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在async.each中使用NodeJ强制执行请求?_Javascript_Node.js_Foreach_Async.js_Requestjs - Fatal编程技术网

Javascript 如何在async.each中使用NodeJ强制执行请求?

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,它迭代一个数组,并对数组中的每个元素执行一个函数“check”,该函数内部有一个请求。这是代码,但是当我运行它时,我从调试器中看到节点没有执行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函数以了解节点的异步性质。那么如何强制执行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
    }
  });
};