[英]Triggering a method after every element in a .each() loop has been processed
[英]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.