[英]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);
}
未在数据集上调用更新方法,承诺立即解决。
var updatePromises = []; data.forEach(item => { updatePromises.push(() => this.update(item)); } return Promise.all(updatePromises);
推送后立即调用更新方法(不在 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
所有这些问题(嘻嘻)
在Promise.all()
创建您的承诺数组:
return Promise.all(data.map(item => this.update(item)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.