亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在繼續之前等待內部“await”?

是否可以在繼續之前等待內部“await”?

繁華開滿天機 2023-12-14 15:08:05
我正在編寫一個函數,通過查詢數據庫獲取價格,然后將其乘以數量來計算總金額。它對數組中的每一項執行此操作,并將總數推送到一個數組,然后將其減少為返回的最終總數。函數如下圖所示:const calculateOrderAmount = async (items: cartProduct[]): Promise<number> => {  const priceArray: number[] = [];  items.forEach(async (p: cartProduct) => {    const product = await Product.findById(p.prodId).exec();    if (product) {      const totalPrice = product.price * p.quantity;      priceArray.push(totalPrice)    } else return;   });  let amount;  if (priceArray.length === 0) amount = 0;  else amount = priceArray.reduce((a, b) => a + b);  return amount;};我遇到的問題是它的異步性。我希望它等待forEach完成,但由于它是異步的,它會繼續執行函數的其余部分,因此最終返回 0。有沒有辦法讓它等待完成forEach?或者我應該以不同的方式重寫它
查看完整描述

2 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

您可以嘗試以下for await of構造:

for await (variable of iterable) {
 statement
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of


查看完整回答
反對 回復 2023-12-14
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

通過使用forEach回調,您可以創建一系列單獨的承諾,但forEach調用本身不會等待這些承諾。


簡單的解決方案是使用循環for,它不使用回調系統:


for (let p: cartProduct of items) {

    const product = await Product.findById(p.prodId).exec();

    if (!product) continue;

    const totalPrice = product.price * p.quantity;

    priceArray.push(totalPrice);

}


查看完整回答
反對 回復 2023-12-14
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號