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

这是一个不错的解决方案!很有创意! –