【问题标题】:How to capture local variable value on asynchronous callback如何在异步回调中捕获局部变量值
【发布时间】:2015-11-07 03:37:02
【问题描述】:
我有这个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?
【问题讨论】:
标签:
javascript
variables
asynchronous
callback
anonymous-function
【解决方案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]);
}
【解决方案2】:
尝试在.then()函数中使用Function.prototype.bind(),设置为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));
}