Promise.all无法正常工作

时间:2018-08-23 08:37:19

标签: typescript promise

我有一个update方法,该方法获取一些数据并返回Promise。 我想使用Promise.all在一组数据上并行运行此方法。 但是调试它,我发现它的行为不符合预期。

更新方法(Typescript)使用承诺的Azure TableService,它也返回承诺:

public update(data: string): Promise<void> {
    // prepare data...
    return this._tableService.replaceEntity(TABLE_NAME, entity);
}
  1. 未对数据集调用更新方法,承诺会立即解决。

    var updatePromises = [];
    data.forEach(item => {          
       updatePromises.push(() => this.update(item));
    }
    return Promise.all(updatePromises);
    
  2. 推送后立即调用更新方法(不在Promise.all中),承诺立即得到解决。

    var updatePromises = [];
    data.forEach(item => {          
       updatePromises.push(this.update(item));
    }
    return Promise.all(updatePromises);
    

1 个答案:

答案 0 :(得分:0)

Nolan Lawson用出色的wraps your program with itself来直接解决两个代码示例的问题:

  

所有这一切的TLDR是forEach() / for / while不是您要查找的结构。您想[将.map()Promise.all()结合起来。

使用他的示例(和上面Bergi的评论)作为模型,您可以通过

在代码中resolve {hee hee}
  1. Promise.all()内部中创建承诺数组:

    return Promise.all(data.map(item => this.update(item)))