簡體   English   中英

處理完ForEach循環中的每個異步函數后,返回Promise的結尾[Javascript / Typescript]

[英]Return end of Promise when every async function in a ForEach loop has been processed [Javascript/Typescript]

我有一個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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM