繁体   English   中英

Promise.all 无法正常工作

[英]Promise.all doesn't work properly

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

Update 方法 (Typescript) 使用 promisified Azure TableService,它也返回 promise:

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 中),promise 立即解决。

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

Nolan Lawson 在他出色的“我们的承诺有问题”中直接解决了您的两个代码示例的问题:

所有这些的 TLDR 是forEach() / for / while不是您正在寻找的构造。 你想要[将.map()与] Promise.all()结合起来。

使用他的示例(以及上面 Bergi 的评论)作为模型,您可以通过以下方式在代码中resolve所有这些问题(嘻嘻)

  1. Promise.all()创建您的承诺数组:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM