0

捕捉局部變量的值我有這個for循環:如何在異步回調

for(var i = 0; i < characters.length; i++) 
{ 
    var character = characters[i]; 
    charService.get(character.name).then(function (characterData) 
    { 
     //I want character to be captured here, i.e. the character in the current loop 
     character.data = characterData; 
    }); 
} 

由於charService.get()是異步的,由執行回調的時候,character是數組(最後一個元素,因爲循環已經結束),因此以前的所有character都留在沒有數據的情況下。

如何保證回調裏面的character.data引用異步方法執行的循環的character

+0

使用玄乎和傳遞參數將使它堅持它 –

+0

這已經回答了[點擊這裏](http://stackoverflow.com/questions/11488014/asynchronous-process-inside-a-javascript-for-loop),[here](http://stackoverflow.com/questions/4288759/asynchronous-for-cycle在JavaScript)和[這裏](http://stackoverflow.com/quest離子/ 21184340 /異步換環在節點-JS)。 – roperzh

回答

0

使用Function.prototype.bind()嘗試.then()功能,設置爲character

for(var i = 0; i < characters.length; i++) 
{ 
    var character = characters[i]; 
    charService.get(character.name).then(function (characterData) 
    { 
     //I want character to be captured here, i.e. the character in the current loop 
     this.data = characterData; 
    }.bind(character)); 
} 
+0

美麗!謝謝! –

1

你可以把它包裝成函數

for(var i = 0; i < characters.length; i++) 
{ 
    (function(character){ 
    charService.get(character.name).then(function (characterData) 
    { 
     //I want character to be captured here, i.e. the character in the current loop 
     character.data = characterData; 
    }); 
    })(characters[i]); 
} 
+0

這是一個不錯的解決方案!很有創意! –