在处理ForEach循环中的每个异步函数时返回Promise的结尾[Javascript / Typescript]

时间:2017-07-31 08:48:33

标签: javascript typescript foreach promise

我有一个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();
});

1 个答案:

答案 0 :(得分:1)

这就是Array#map()Promise.all()存在的原因。当您需要引用每个数组项的承诺时,请不要使用Array#forEach()doAsyncThingsToArray()的正文应如下所示:

return Promise.all(array.map((item) => this.doAsyncStuff(item))

this.doAsyncStuff()返回承诺的地方。