async.forEach NodeJS中的暂停/超时

时间:2015-08-10 22:09:59

标签: node.js loops asynchronous node-async

所以我们说水果是一个包含4个项目的数组 我所期望的是,下面的代码会打印水果,每个水果之间有4秒的延迟。

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

实际行为是等待4秒,然后打印整个列表。 :\有谁知道如何实现我的预期行为?

2 个答案:

答案 0 :(得分:6)

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!');
});

答案 1 :(得分:0)

每个水果运行延迟1秒。 4秒后,您所有的果实都被记录下来。

var fruits = ['blueberries', 'strawberries', 'mango', 'peaches'];
async.eachOfLimit(fruits,1, function (fruit,index, fruitCb) { 
     setTimeout(function() {
          console.log(fruit);
          fruitCb(); 
     }, 1000*index);
}, function () {
     console.log('Done going through fruits!');
});