1
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 までのすべての非同期関数を呼び出しますが、コールバックが完了するのを実際には待ちません

しかし、2 つ目 (私のプロジェクトの 1 つ) は、コールバックを待って、配列内の次の項目に進むようです?

両方とも同じですか?

4

1 に答える 1

3

2 番目が 49 ではなく 50 になることを除けば、機能的には同じです。どちらも、次の反復を続行する前にコールバックを待機しません。また、どちらの場合も、各呼び出しは現在の 0...49 値をローカル パラメーターとしてキャプチャするfunctionWrappingAsycfuncsため、両方とも 0 1 2 3... をログに記録します。

于 2013-01-07T02:04:35.747 に答える