繁体   English   中英

如何使用nodejs强制执行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM