Async.js - откладывает выполнение при доступе к правильному индексу массива - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь нам 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 Ответ

1 голос
/ 03 апреля 2012

У вас классическая проблема с областью закрытия. Вам нужно передать переменную 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...