【问题标题】:modify array after promise.all in foreach loop在 foreach 循环中修改 promise.all 之后的数组
【发布时间】:2019-02-19 09:00:17
【问题描述】:

我有一个这样的数组

 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 循环来达到我想要的结果,有没有更好的方法来做到这一点??

【问题讨论】:

  • 数组项与原来的有点不同,除了都使用了

标签: javascript foreach async-await


【解决方案1】:

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

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

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

【讨论】:

  • 您的代码和 OP 代码中的行为可能会有所不同,具体取决于 OP 在任何一次调用失败时想要执行的操作。
猜你喜欢
  • 2013-04-26
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多