2016-08-24 5 views
-1

Хотя это работает, и печатает я от 0 до 9Как JS привязку к внешней функции обратного вызова Кордова

for (var i=0; i < 10; i++ { 

    function myFunction (callback) { 
     setTimeout(function() { 
      callback('Answering your phone call'); 
     }, 10000); 
    } 

    myFunction(function (message) { 
     console.log("i = " + this.i + " , message = " + message); 
    }.bind({i: i})); 
} 

Это не работает, и печатает я, как 10, 10, 10, ... 10 (10 раз)

for (var i=0; i < 10; i++ { 

    // There is an externalFunction, which is a Cordova call, that does call the callBack function with a message. 

    externalFunction(function (message) { 
     console.log("i = " + this.i + " , message = " + message); 
    }.bind({i: i})); 
} 

Что я делаю неправильно? У меня нет контроля над внешней функцией, и я хочу сохранить вызов #, когда callBack вернется.

Я пробовал различные версии закрытий и связывает и не могу заставить это работать.

+0

Возможный дубликат [Закрытие внутренних циклов JavaScript - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Hamms

+0

@Hamms Он не использует закрывающая переменная, он использует свойство объекта. – Barmar

+0

Первый показывает только 0-9, потому что цикл заканчивается на i <10, поэтому «i» никогда не будет равняться 10 –

ответ

0

@ Нилс ответил и продемонстрировал свое кодовое перо правильно, что внешняя функция фактически сохраняет значение привязки.

Однако после часа отладки выяснилось, что слой Кордовы, когда он создает отдельные сеансы во время выполнения, перезаписывает значение «this», и в конечном итоге вызов обратного вызова используется независимо от значения.