我有一个 ForEach 循环,在其中调用异步函数。使用计数器,我可以计算出数组中的所有项目何时已被处理,但我想知道的是,当所有项目都已处理完毕后,如何返回已解决的 Promise ?强>
public doAsyncThingsToArray(array: number[]): Promise<void>
let count: number;
array.forEach((item) => {
this.doAsynchStuff(item)
})
.then(() => {
count++;
if (count == item.length) {
//Probably something has to be done here
}
});
我希望能够调用我的函数doAsyncThingsToArray
像这样:
doAsyncThingsToArray(myArray)
.then(() => {
//all my array has been processed
})
谢谢!
编辑:
下面的代码有效
public doAsyncThingsToArray(array: number[]): Promise<void> {
Promise.all(
array.map((item) => {
return this.doAsynchStuff(item)
.then(() => {
console.log("item processed");
return Promise.resolve();
})
})
)
.then(() => {
console.log("All item are processed");
return Promise.resolve();
});
最佳答案
这就是为什么Array#map()
和 Promise.all()
存在。当您需要对每个数组项的 Promise 的引用时,请勿使用 Array#forEach() 。 doAsyncThingsToArray()
的主体应如下所示:
return Promise.all(array.map((item) => this.doAsyncStuff(item))
其中 this.doAsyncStuff()
返回一个 promise 。
关于javascript - 当 ForEach 循环中的每个异步函数都已处理完毕时返回 Promise 结尾 [Javascript/Typescript],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45411264/