在promise.all之后在foreach循环中修改数组

时间:2019-02-19 09:00:17

标签: javascript foreach async-await

我有一个像这样的数组

 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循环以达到所需的结果,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以改用.map,并在链接到element调用的.then内将其分配回getAmount

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

(尽管,正如注释所指出的那样,这不会在分配给每个element之前等待每个响应都返回-您的当前代码将在分配给任何请求引发错误之前在分配之前抛出,而这很可能会在之后抛出一些属性已分配给。)