我正在尝试我们Async.js来处理一系列项目。是否有一些可爱的方法让这个正常工作?如果你比我更聪明,除了因延迟执行而导致http://3被打印三次。
var a_servers = ['http://1', 'http://2', 'http://3'];
var a_actions = [];
for (var i = 0; i < a_servers.length; i += 1)
{
var server = a_servers[i];
a_actions.push(function(callback)
{
document.write(server + '<br/>');
callback(false, server );
});
}
async.series(a_actions, function(err, a_servers)
{
document.write('processed ' + a_servers.length + ' servers<br>');
console.info(a_servers);
});
答案 0 :(得分:1)
您有一个经典的封闭范围问题。您需要将server
变量从外部作用域传递到内部作用域以获得所需的行为。您可以使用IIFE。
for (var i = 0; i < a_servers.length; i += 1)
{
var server = a_servers[i];
a_actions.push((function(server) {
return function(callback) {
document.write(server + '<br/>');
callback(false, server );
})(server));
}