2017-07-07 35 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但一次只运行一个单一的异步操作。

相关问题