這個問題在這里已經有了答案: 將 async/await 與 forEach 回圈一起使用 (33 個答案) 10 天前關閉。
我是異步函式的新手。我試圖回傳物件 name_dates,但是當我將它記錄到控制臺時,它只回傳一個空物件。
這是我的代碼:
async findAllScribesWithProfileName() {
...
let name: string;
let dates: Date[];
type NameDates = { display_name: string; created: Date[] };
const name_dates = <NameDates[]>{};
owners.forEach(async (owner, ownerIdx) => {
name = (await this.profileService.getById(owner)).display_name;
dates = scribes
.filter((scribe) => scribe.owner == owner)
.map((s) => s.created);
name_dates[ownerIdx] = {
display_name: name,
created: dates,
};
});
return name_dates;
}
我試圖在owners.forEach回圈內移動 return 陳述句,但沒有產生我期望的結果。
uj5u.com熱心網友回復:
您可以改為使用Promise.all和映射陣列,這樣您就可以等待它們全部同時完成(并行):
await Promise.all(
owners.map(async (owner, ownerIdx) => {
name = (await this.profileService.getById(owner)).display_name;
dates = scribes
.filter((scribe) => scribe.owner == owner)
.map((s) => s.created);
name_dates[ownerIdx] = {
display_name: name,
created: dates,
};
})
);
return name_dates;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533689.html
標籤:打字稿异步异步等待承诺
上一篇:如何在回圈中呼叫Ajax
