Promise.all不等待完成内部Promise.all完成

时间:2020-09-17 12:41:16

标签: javascript promise async-await es6-promise

dissectors

我得到的输出如下所示,

  1. 信息
  2. 信息
  3. 循环完成
  4. 承诺已解决
  5. 下一步
  6. UpdatedInfo
  7. 完成循环
  8. 下一步
  9. UpdatedInfo

它应该给出这样的输出,

  1. 信息
  2. 循环完成
  3. 已解决的承诺:10
  4. 下一步
  5. UpdatedInfo
  6. 信息
  7. 循环完成
  8. 承诺解决:10
  9. 下一步
  10. UpdatedInfo

1 个答案:

答案 0 :(得分:0)

使用.map(async (e) => {...})时,所有功能都同时开始执行。 await Promise.all(arr.map(async (e) => {...}))等待所有 完成,但是仍然是并行的。

您要使它们顺序排列。您可以使用for循环:

for (let info of obj) {
      console.log('info', JSON.stringify(info));
      for (let index = 0 ; index < info.Address.length; index++) {
      let items = info.Address[index];
        console.log('ParentItems IsParentLossCapability',);
        let pr = await firstFunction();
        console.log('promise resolved: ' + pr)
        console.log('next step');
      }
      console.log('UpdatedInfo', JSON.stringify(obj));
}

或使用异步缩减:

await obj.reduce(async (memo, info) => {
      await memo;
      console.log('info', JSON.stringify(info));
      await info.Address.reduce(async (memo2, items, index) => {
        await memo2;
        console.log('ParentItems IsParentLossCapability',);
        let pr = await firstFunction();
        console.log('promise resolved: ' + pr)
        console.log('next step');
      }), Promise.resolve());
      console.log('UpdatedInfo', JSON.stringify(obj));
    }, Promise.resolve());