Async.js - 在仍然访问正确的数组索引的同时延迟执行

时间:2012-04-03 04:01:26

标签: javascript asynchronous

我正在尝试我们Async.js来处理一系列项目。是否有一些可爱的方法让这个正常工作?如果你比我更聪明,除了因延迟执行而导致http://3被打印三次。

jsFiddle link

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);
});​

1 个答案:

答案 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));
}