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作为参数,但并不真正等待回调完成
但是第二个(在我的一个项目中)似乎在等待回调并继续到数组中的下一个项目?
他们俩都一样吗?
答案 0 :(得分:3)
除了第二个到50而不是49,它们在功能上是相同的。在继续下一次迭代之前,它们都不会等待回调,在这两种情况下,每次调用都会将当前0 ... 49值作为本地参数捕获到functionWrappingAsycfuncs
,因此它们都会记录0 1 2 3。 ..