【问题标题】:Async.js Library Throws off Numbers in for loopAsync.js 库在 for 循环中抛出数字
【发布时间】:2013-10-21 20:59:00
【问题描述】:

对 Node.js 使用 Async Libeary,尝试在 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 函数时注意到了同样的事情。

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

【问题讨论】:

    标签: javascript node.js for-loop async.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我向异步库道歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多