我正在使用Firebase Cloud Firestore,但是,我认为这可能更像是JavaScript异步vs同步承诺返回问题 .
我正在进行查询以从一个集合中获取ID,然后我循环查询该查询的结果,以根据该ID查找来自另一个集合的各个记录 .
然后我想将每个找到的记录存储到一个数组中,然后返回整个数组 .
results.length 始终为0,因为 return results 在forEach完成之前触发 . 如果我从forEach中打印 results.length 它有数据 .
在从外部promise和外部函数本身返回之前,我怎么能等到forEach完成?
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);
});
}