async.each()不执行最终回调

时间:2015-05-10 11:17:36

标签: node.js async.js

async.each(spiders, function(){
    console.log('hi');
}, function(err) {
    if(err) { console.log(err);}
    else console.log('ok');
});

在记录' hi'之后,async没有执行回调并记录了“确定”#39;或错误。

我的代码有什么问题?

2 个答案:

答案 0 :(得分:13)

async为您的iterator函数提供了两个重要参数:itemcallback。第一个给出数组中的实际数据项,第二个是函数,以指示实际方法的结束。当每个迭代器调用指示自己的回调时,将调用最终回调(带有日志('ok')的回调)。

所以你的代码应该是这样的:

async.each(spiders, function(item, callback) {
  console.log('spider: ' + item);
  callback(null);
}, function(err) {
  if (err) {
    return console.log(err);
  }
  console.log('ok');
});

null参数表示没有错误。

另请注意,处理这样的错误是一种更好的做法。

答案 1 :(得分:2)

引用async.each文档:

  

iterator(item, callback) - 适用于arr中每个项目的功能。迭代器传递callback(err),必须在完成后调用它。如果没有发生错误,则应该在没有参数或显式null参数的情况下运行回调。

结论:您忘记接受回调参数,因此也没有调用它。