如何在异步回调
问题描述:
捕捉局部变量的值我有这个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
?
答
使用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
美丽!谢谢! –
答
你可以把它包装成函数
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
这是一个不错的解决方案!很有创意! –
使用玄乎和传递参数将使它坚持它 –
这已经回答了[点击这里](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