Node.js async.each';t调用回调函数

Node.js async.each';t调用回调函数,node.js,async.js,Node.js,Async.js,我在node.js中的aysnc函数中遇到了一些问题。下面是我的代码: let async = require("async"); let list1 = { "aaa": true, "bbb": true } let list2 = [{ "name": "aaa" }, { "name": "bbb" }]; let flag = true; let i = 0; async.each(list2, function (activity, callback) { if

我在node.js中的aysnc函数中遇到了一些问题。下面是我的代码:

let async = require("async");
let list1 = {
  "aaa": true,
  "bbb": true
}
let list2 = [{
  "name": "aaa"
}, {
  "name": "bbb"
}];
let flag = true;
let i = 0;
async.each(list2, function (activity, callback) {
  if (!list1[activity['name']]) {
    flag = false;
  }
  i++;
  if (i === list2.length) {
    callback(null);
  //callback("error");
  }
}, function (err) {
  console.log(err);
  console.log("completed callback");
  //need the value of flag to execute my business logic 
});

如果列表1中的值都是
true
,则标志的值将是
true
,我将根据标志执行业务逻辑。我还设置了一个
I
来判断它是否是最后一个循环,所有循环执行完毕,我想调用回调。但是,如果我设置
回调(“error”)我可以调用最后的回调。如果我设置了
回调(null),我无法调用最终回调。

您可以在回调中使用您的标志变量,因为它将在范围内,并且您不需要在循环结束时手动调用回调

只要没有发生错误,我们将在每次迭代中不传递任何参数的情况下调用回调

在这种情况下,以这种方式使用标志是安全的,因为我们只会在逻辑需要时将其设置为false

let async = require("async");

let list1 = {
    "aaa": true,
    "bbb": true
}
let list2 = [{
    "name": "aaa"
}, {
    "name": "bbb"
}];

// Assume flag is initally true.
let flag = true;
async.each(list2, function (activity, callback) {
    if (!list1[activity['name']]) {
        flag = false;
    }
    // Pass an error if it occurs.
    callback();

}, function (err) {
    if (err) {
        console.error("An error occurred: ", err);
    } else {
        // You can use flag in your business logic now.
        console.log(`Completed callback: flag: ${flag}`);
    }
});