2017-07-07 31 views
1

在我使用的是async NPM module並寫了下面的程序:異步NPM模塊不執行setTimeout的每個項目的陣列

var async = require('async'); 

var arr = [1,2,3,4]; 

async.each(arr, function (item) { 
    setTimeout(function() { 
    console.log('item: ', item); 
    }, 1000); 
}, function (error) { 
    console.log('error', error); 
}); 

我期待的控制檯日誌每1秒後出現,但它顯示了所有1秒後立即記錄日誌。

我該如何解決這個問題?

+0

setTimeout函數的超時時間爲1秒,並且它們都是同時設置的,所以它們都將同時結束。如果你希望每秒都發生一次,你必須增加每一個的超時時間。 – Jeremy

回答

2

使用eachSeries代替each和傳遞一個回調函數:

var async = require('async'); 

var arr = [1,2,3,4]; 

async.eachSeries(arr, function (item, callback) { 
    setTimeout(function() { 
    console.log('item: ', item); 
    callback(); 
    }, 1000); 
}, function (error) { 
    console.log('error', error); 
}); 

eachSeries相同each但一次只運行一個單一的異步操作。

相關問題