如何在异步回调中捕获局部变量值

How to capture local variable value on asynchronous callback

我有这个 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

尝试在 .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));
}

你可以把它包装成函数

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]);
}