Node.JS:forEach 与 for 循环异步性质

Posted

技术标签:

【中文标题】Node.JS:forEach 与 for 循环异步性质【英文标题】:Node.JS : forEach vs for loop Asynchronous nature 【发布时间】:2012-12-20 18:11:19 【问题描述】:
for(var i=0;i<50;i++) 
      functionWrappingAsycfuncs(i)


var nums = [0,1...50]
nums.forEach(functionWrappingAsyncfuns)

functionWrappingAsycfuncs(i)
  readFileAsync(i,function()
    console.log(i);
  );

在上述函数中,在 for 循环中运行它的预期性质是记录 50 50 次? 但是对于 forEach 它确实记录了 1 2 3 ....

这两种实现看起来都一样,但执行的任务却截然不同 第一个函数以 0 到 50 作为参数调用所有异步函数,但并没有真正等待回调完成

但第二个(在我的一个项目中)似乎等待回调并继续数组中的下一项?

它们都一样吗?

【问题讨论】:

【参考方案1】:

除了第二个是 50 而不是 49,它们在功能上是相同的。两者都不会在继续下一次迭代之前等待回调,并且在这两种情况下,每次调用都会捕获当前 0...49 值作为functionWrappingAsycfuncs 的本地参数,因此它们都会记录 0 1 2 3...

【讨论】:

以上是关于Node.JS:forEach 与 for 循环异步性质的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 等待循环中读取的所有文件

node.js中的forEach是同步还是异步

node.js里的forEach也是异步的吗

为啥 .forEach() 有效但 for 循环无效? [复制]

在Javascript中确保forEach / for循环的正确顺序的简单方法?

Node.js 同步循环或迭代异步语句