javascript - async.each 内的异步函数不会被触发

标签 javascript node.js asynchronous

任何人都可以解释以下控制台日志的打印顺序吗?我正在使用异步版本 1.4.23 。
响应包含两项。
输出:标签1
标签2
标签2
标签4
标签3
标签 3

async.parallel([
  function(callback){
    detailsData.list({}, function(err, response) {
      if (!err) {
        console.log("label 1");
        async.each(response, function(item, cb) {
          console.log("label 2");
          itemList.getData(item, function(err, response) {
            console.log("label 3");
            }
            cb(err);
          });
        });
      }
      callback(err);
    });  
  },
  function (callback) {
    somefunction();
  }], function (err) {
    console.log("label 4");
  }  

为什么标签 3 没有在标签 4 之前打印?

最佳答案

您必须将从 async.parallel 获得的 callback 传递给 async.each,而不是立即调用它,否则并行执行不会等待每个。

async.parallel([
  function(callback){
    detailsData.list({}, function(err, response) {
      if (err) return callback(err); // <- still call it when you're not going for the each
      console.log("label 1");
      async.each(response, function(item, cb) {
        console.log("label 2");
        itemList.getData(item, function(err, response) {
          console.log("label 3");
          cb(err, response);
        });
      }, callback);
//       ^^^^^^^^
    });
  },
  function(callback) {
    somefunction();
    callback();
  }
], function(err) {
  console.log("label 4");
});

关于javascript - async.each 内的异步函数不会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33593534/

相关文章:

node.js - docker 。 npm 安装 -> 错误 : getaddrinfo ENOTFOUND

javascript - 如果使用 JavaScript 登录失败,如何在登录页面显示消息

javascript - Discord 如何对今天和昨天的日期进行格式化?

javascript - 通过 JavaScript 函数调用 Web API

node.js - 如何通过apache连接 Node 服务器?

C++ 异步 OutputDebugString

java - Android 低功耗蓝牙

javascript - NodeJS,JS如何在模块中导出Promise值,而不是函数?

javascript - 格式化日期对象,使其精度以秒为单位

javascript - 如何转换此日期范围(月,年)日期选择器以以数字格式显示月份的输出