【发布时间】:2021-09-16 01:34:34
【问题描述】:
我正在使用 Firebase Cloud Firestore,但是,我认为这可能更像是 JavaScript 异步与同步承诺返回问题。
我正在执行查询以从一个集合中获取 ID,然后循环该查询的结果以根据该 ID 从另一个集合中查找单个记录。
然后我想将找到的每条记录存储到一个数组中,然后返回整个数组。
results.length 始终为 0,因为 return results 在 forEach 完成之前触发。如果我从 forEach 内部打印 results.length 它有数据。
如何等到 forEach 完成后再从外部 Promise 和外部函数本身返回?
getFacultyFavoritesFirebase() {
var dbRef = db.collection("users").doc(global.user_id).collection("favorites");
var dbQuery = dbRef.where("type", "==", "faculty");
var dbPromise = dbQuery.get();
var results = [];
return dbPromise.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
var docRef = db.collection("faculty").doc(doc.id);
docRef.get().then(function(doc) {
if (doc.exists) {
results.push(doc);
}
})
});
console.log(results.length);
return results;
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
【问题讨论】:
-
您可以使用
Promise.all将一组promise 合并为一个promise。
标签: javascript node.js firebase google-cloud-firestore