我有一个update
方法,该方法获取一些数据并返回Promise。
我想使用Promise.all
在一组数据上并行运行此方法。
但是调试它,我发现它的行为不符合预期。
更新方法(Typescript)使用承诺的Azure TableService,它也返回承诺:
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中),承诺立即得到解决。
var updatePromises = [];
data.forEach(item => {
updatePromises.push(this.update(item));
}
return Promise.all(updatePromises);
答案 0 :(得分:0)
Nolan Lawson用出色的wraps your program with itself来直接解决两个代码示例的问题:
所有这一切的TLDR是
forEach()
/for
/while
不是您要查找的结构。您想[将.map()
与Promise.all()
结合起来。
使用他的示例(和上面Bergi的评论)作为模型,您可以通过
在代码中resolve
{hee hee}
在Promise.all()
的内部中创建承诺数组:
return Promise.all(data.map(item => this.update(item)))