我在一个有角度的应用程序上使用打字稿工作,我从以下代码中衍生出一些东西:
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
循环完全完成之后运行一些代码。