如何等待直到异步forEach完成

时间:2019-12-05 13:34:18

标签: javascript angular firebase foreach google-cloud-firestore

我在一个有角度的应用程序上使用打字稿工作,我从以下代码中衍生出一些东西:

async getMyPlacements(){
      const placements = await this.db.firestore.collection[...];

      placements.docs.forEach(async (doc, placementIndex, placementArray) => {

        [...]

        const learners = await doc.data().learners;

        await learners.forEach(async (learner, learnerIndex, learnerArray) => {    
          await learner.get();

          console.log("Placement: "+placementIndex.toString() + " -> "+(placementArray.length-1).toString());
          console.log("Learner: "+learnerIndex.toString() + " -> "+(learnerArray.length-1).toString());

        });
      });
    }

在每个异步方法中,我都不得不等待数据库查询解决,因此,使它们是否异步没有太多发言权。

使用console.log来跟踪每个循环的索引,其中position.docs的长度是10,学习者循环的长度是1到3,我希望看到的是:< / p>

Placement: 0 -> 9
Learner: 0 -> 0
Placement: 1 -> 9
Learner: 0 -> 1
Placement: 1 -> 9
Learner: 1 -> 1

表示正常通过foreach循环。但是,相反,我观察到的是数字遍地都是。

Placement: 0 -> 9
Learner: 0 -> 0
Placement: 1 -> 9
Learner: 0 -> 0
Placement: 2 -> 9
Learner: 0 -> 1
Placement: 3 -> 9
Learner: 0 -> 0
Placement: 4 -> 9
Learner: 0 -> 0
Placement: 5 -> 9
Learner: 0 -> 0
Placement: 6 -> 9
Learner: 0 -> 0
Placement: 8 -> 9
Learner: 0 -> 2
Placement: 9 -> 9
Learner: 1 -> 1
Placement: 2 -> 9
Learner: 1 -> 1
Placement: 7 -> 9
Learner: 0 -> 0
Placement: 8 -> 9
Learner: 1 -> 2
Placement: 8 -> 9
Learner: 2 -> 2
Placement: 9 -> 9
Learner: 0 -> 1

奇怪而又奇怪地跳到Placement: 9 -> 9 | Learner: 1 -> 1的末尾,大约只有一半。问题是我有一些代码仅在所有循环完全关闭后才需要运行。我知道forEach并没有.then()这样的东西,而且鉴于数字是如何工作的,我也不能只算到最后。我尝试将await放在placements.docs.forEach[...]前面,但这似乎并没有改变。

任何帮助将不胜感激。我只是想在所有forEach循环完全完成之后运行一些代码。

0 个答案:

没有答案