0

使用 Node.js 的异步库,尝试在 for 循环中引用变量不起作用。

例如:

var functionArray = []
, x;

for(x = 0; x < 5; x++) {
  functionArray.push(function (callback) {
    console.log(x);
    callback();
  });
}

async.series(functionArray, function (err, results) {
  console.log("Finished");
});

输出是:

5
5
5
5
5

这似乎是特定于 Async 库的。当您在没有库的情况下运行函数时,如下所示:

for(x = 0; x < 5; x++) {
  functionArray[x](function () {});
}

输出是:

0
1
2
3
4

我在使用 async.parallel 函数时注意到了同样的事情。

有没有办法解决?如果你需要运行一堆类似的函数,但它们里面有不同的数字(例如,当索引一个数组时)并且你需要它们一个接一个地运行而不是异步运行呢?如何实现?

4

1 回答 1

1

这对于任何异步调用的函数都是一样的,而不仅仅是异步库。当循环完成时调用该函数,因此变量处于其结束状态。

将函数内部的代码包装在一个立即执行的匿名函数中,这样您就可以为每次迭代创建一个单独的变量:

for(x = 0; x < 5; x++) {

  (function(y){

    functionArray.push(function (callback) {
      console.log(y);
      callback();
    });

  })(x);

}
于 2013-10-21T21:06:58.890 回答