【问题标题】: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

【问题讨论】:

  • 使用 iffy 并传递参数将使其持久化
  • 已回答hereherehere

标签: 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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多