【发布时间】:2019-04-01 20:43:43
【问题描述】:
我正在使用firebase的.onSnapshot来获取当前在线用户的ID,并将每个ID存储到一个数组中。我成功部署.onSnapshot获取在线用户的ID,但最后返回一个空数组
var learning_language;
db.collection(ll_profile).doc(user_uid).get().then(function(doc) {
learning_language = doc.data().learning_language;
})
db.collection(ns_status).where("state", "==", "online").onSnapshot(function(snapshot) {
var ns_match = [ ];
snapshot.forEach(function(userSnapshot) {
db.collection("ns_profile").doc(userSnapshot.id).get().then(function(doc) {
spoken_language = doc.data().spoken_language;
if (learning_language == spoken_language) {
ns_match.push(userSnapshot.id);
console.log(ns_match);
}
})
})
return (ns_match);
我要做的是首先定义从集合ll_profile中检索到的learning_language,当前用户的ID名为user_uid.
然后 .onSnapshot 在ns_status 集合中侦听另一组用户的在线状态(如果用户在线或离线,它会自动更新)。之后,检查从.onSnapshot 返回的在线用户是否在其文档中的spoken_language 字段(以其相应的uid 命名)与之前定义的learning_language 匹配。如果匹配,则将uid存入ns_match.的数组中
ns_match 中的值是正确的。我认为.get() 异步执行。这就是 ns_match 返回空的原因。
我应该如何在最后返回 ns_match 并正确存储所有值?
提前致谢。
【问题讨论】:
-
您可以使用承诺或回调。无需将此调用异步\
标签: javascript firebase google-cloud-firestore