【问题标题】:async.each() final callback is not executedasync.each() 最终回调未执行
【发布时间】:2015-07-20 23:00:38
【问题描述】:
async.each(spiders, function(){
    console.log('hi');
}, function(err) {
    if(err) { console.log(err);}
    else console.log('ok');
});

在记录 'hi' 后,async 没有执行回调并记录 'ok' 或错误。

我的代码有什么问题?

【问题讨论】:

  • 你想使用异步的forEach_.each

标签: node.js async.js


【解决方案1】:

引用async.each 文档:

iterator(item, callback) - 应用于arr 中每个项目的函数。迭代器传递了一个callback(err),一旦完成就必须调用它。如果未发生错误,则应在不带参数或显式 null 参数的情况下运行回调。

结论:你忘了带回调参数,所以也没有调用。

【讨论】:

    【解决方案2】:

    async 为您的iterator 函数提供了两个重要参数:itemcallback。第一个为您提供数组中的实际数据项,第二个是一个函数,用于指示实际方法的结束。最后一个回调(带有 log('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参数表示没有错误。

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

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2018-03-13
      • 2020-04-02
      相关资源
      最近更新 更多