5

では、果物が 4 つの項目を含む配列であるとしましょう。私が予想したのは、以下のコードは、各果物の間に 4 秒の遅延で果物を出力するということでした。

var fruits = ['blueberries', 'strawberries', 'mango', 'peaches'];
async.forEach(fruits, functions(fruit, next) { 
     setTimeout(function() {
          console.log(fruit);
     }, 4000);
})

実際の動作は、4 秒待ってからリスト全体を出力することです。:\ 期待される動作を達成する方法を知っている人はいますか?

4

1 に答える 1

10

async.forEachつまり、配列内の各項目の関数がすぐに実行され、それらすべてがコールバックを実行すると、(含めなかった) コールバック関数が呼び出されます。

あなたの場合、一度に 1 つずつ、または一連の配列を実行したいので、.eachSeriesメソッドが必要になります。

var fruits = ['blueberries', 'strawberries', 'mango', 'peaches'];
async.eachSeries(fruits, function (fruit, next) { 
     setTimeout(function() {
          console.log(fruit);
          next(); // don't forget to execute the callback!
     }, 4000);
}, function () {
     console.log('Done going through fruits!');
});
于 2015-08-10T22:19:16.810 に答える