Firestore Javascript嵌套的foreach查询在第二个查询之前循环
我正在尝试获取我的“用户”集合中某个子集合上引用的地点和审阅的文档ID。在得到它之后,我执行另一个查询,然后使用这些ID获取另一个集合“places”中的review字段的实际值Firestore Javascript嵌套的foreach查询在第二个查询之前循环,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我正在尝试获取我的“用户”集合中某个子集合上引用的地点和审阅的文档ID。在得到它之后,我执行另一个查询,然后使用这些ID获取另一个集合“places”中的review字段的实际值 var query = db.collection('users/ziRsQGzbuwVp805SYY9vkZIbbJ93/myRecommendations'); query.get().then(function(querySnapshot){ querySnapshot.f
var query = db.collection('users/ziRsQGzbuwVp805SYY9vkZIbbJ93/myRecommendations');
query.get().then(function(querySnapshot){
querySnapshot.forEach(function(doc){
locData.placeID = doc.data().placesDocument;
locData.reviewID = doc.data().reviewDocument;
var query2 = db.collection('places').doc(locData.placeID).collection('reviews').doc(locData.reviewID)
query2.get().then(function(doc){
locData.review = doc.data().specRemarks
locdataArr.push(parse)
console.log(locdataArr)
但是,foreach将从第一个查询中删除
querySnapshot.forEach(function(doc){
locData.placeID = doc.data().placesDocument;
locData.reviewID = doc.data().reviewDocument;
var query2 = db.collection('places').doc(locData.placeID).collection('reviews').doc(locData.reviewID)
query2.get().then(function(doc){
locData.review = doc.data().specRemarks
似乎在执行第二个查询之前循环,这只会导致第一个查询的最后一个输出与日志中的这些输出一起通过第二个查询
审查成功(firestore中的一个值实际上为空,另一个值正在测试/n)
但记录的ID仅来自第一个查询的最后一个输出。我该如何解决这个问题?您所观察到的是我所期望的。由于
get()
是异步的并返回承诺,因此它总是在查询结果可用之前立即返回。如果将对get()
的一系列调用放在一个循环中,那么该循环总是在异步工作的任何结果完成之前完成
如果要等待一组承诺得到解决,则应将它们收集到一个数组中,并使用Promise.all()
创建另一个承诺,在所有承诺都完成时进行解决
另见: