簡體   English   中英

在foreach循環中在promise.all之后修改數組

[英]modify array after promise.all in foreach loop

我有這樣的數組

 let result =  [{id:1,name:'test',dealValue:'ds',dealType:2},{id:2,name:'test1',dealValue:'ds',dealType:4}];

我正在循環上述數組以調用另一個函數,這也是每次迭代后的承諾,我需要將該值添加為當前數組中的新項。

let temp = [];

result.forEach((element, index) => {
    //build the promise    
    temp.push(getAmount(element.dealValue, element.dealType));
  });
  //execute array of promise
  let r = await Promise.all(temp);
  //add new key value pair
  result.forEach((element, index) => {
    element.IDGfee = r[index];
  });

這工作正常,但是,我正在運行兩個foreach循環以達到我想要的結果,有沒有更好的方法呢?

您可以改用.map ,然后將其分配回getAmount內的element .then鏈接到getAmount調用上:

await Promise.all(
  result.map((element) => (
    getAmount(element.dealValue, element.dealType)
      .then((result) => {
         element.IDGfee = result;
      })
  ))
);

(但是,正如注釋所指出的那樣,在分配給每個element之前,這不會等待每個響應都返回-如果有任何請求拋出錯誤,則當前的代碼將在分配之前拋出,而在分配了某些屬性之后,這很可能會拋出。 )

暫無
暫無

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

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