Javascript асинхронные события и использование глобальной переменной локально (например, счетчик) - PullRequest
1 голос
/ 13 марта 2012

Я не уверен, что мой вопрос понятен. Я не знаю лучшего способа объяснить это без примера.

Предположим, у меня есть следующий код:

function foo(obj){
    var index = 0;
    obj.onstart = function(){
        ++index;
        console.log('start', index);
    }
    obj.onfinish = function(){
        console.log('finish', index);
    }
}

Теперь давайте предположим, что у меня есть следующий тестовый пример:

foo(slow_connection);
foo(fast_connection);

Обычно onfinish из slow_connection запускается после onstart из fast_connection, вызывая следующий вывод.

start 1
start 2
finish 2      <-- This should be 1!
finish 2

PS: Я не могу изменить аргументы foo() единственный код, который я могу изменить, находится внутри foo().

1 Ответ

1 голос
/ 13 марта 2012

Примерно так:

function foo(obj){
  var index = 0;

  obj.onstart = function(){
    ++index;
    console.log('start', index);
  };

  // bind onfinish using a "copy" of the current index.
  obj.onfinish = (function (idx) {
    return function () {
      console.log('finish', idx);
    };
  }(index));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...