Typescript 承诺。一切都不会发生;我不能正常工作
我有一个Typescript 承诺。一切都不会发生;我不能正常工作,typescript,promise,Typescript,Promise,我有一个update方法,获取一些数据并返回一个承诺。 我想在一组带有Promise.all的数据上并行运行此方法。 但在调试它时,我发现它的行为并不像预期的那样 更新方法(Typescript)使用promisified Azure表服务,该服务还返回promise: public update(data: string): Promise<void> { // prepare data... return this._tableService.replaceEnt
update
方法,获取一些数据并返回一个承诺。
我想在一组带有Promise.all
的数据上并行运行此方法。
但在调试它时,我发现它的行为并不像预期的那样
更新方法(Typescript)使用promisified Azure表服务,该服务还返回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);
var updatePromises = [];
data.forEach(item => {
updatePromises.push(this.update(item));
}
return Promise.all(updatePromises);
诺兰·劳森(Nolan Lawson)在他的优秀作品中直接解决了两个代码示例的问题: 所有这些的TLDR都是/
的forEach()
/,而
不是您要寻找的构造。您希望[将.map()
与]Promise.all()
相结合
使用他的例子(以及上面Bergi的评论)作为模型,您可以通过
在Promise.all()
中创建承诺数组:
如果您的update
函数是同步的(没有任何wait
s或延迟回调来解析承诺),那么承诺将在您调用该函数时立即解析。不,它是异步的并使用promise扫描您发布的代码?顺便说一句,使用map
而不是forEach
承诺是渴望而不是懒惰的,你不能让他们同时开始,你只能带着承诺等待他们
return Promise.all(data.map(item => this.update(item)))