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并行遍历数组,这意味着它将立即为数组中的每个项目运行该函数,然后当它们都执行回调时,将调用回调函数(您未能包含)。

在您的情况下,您希望一次运行一个数组,或者以一系列方式运行,因此您需要该.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 回答