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

Async.js - Deferring execution while still accessing the correct array index

本文关键字:索引 数组 时延 延迟 执行 js- 访问 Async      更新时间:2023-09-26

我正在尝试使用Async.js来处理一组项。有什么可爱的方法可以让它正常工作吗?如果你比我聪明,你可能会因为延迟执行而将http://3打印三次。

jsFiddle链接

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

您有一个经典的闭包范围问题。您需要将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));
}