gpt4 book ai didi

javascript - 当 ForEach 循环中的每个异步函数都已处理完毕时返回 Promise 结尾 [Javascript/Typescript]

转载 作者:行者123 更新时间:2023-12-03 03:45:27 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com