我有一个分为两步的Firebase Firestore代码。第一步是在线获取所有用户,第二步检查learning_language是否相等。第一步将生成一个地图循环,以遍历所有在线用户。但是最后的console.log返回一个空数组。
db.collection(ns_status).where("state", "==", "online").onSnapshot(function(snapshot) {
var ns_match = snapshot.docs.map(function(userSnapshot) {
db.collection(ns_profile).doc(userSnapshot.id).get().then(function(doc) {
spoken_language = doc.data().spoken_language;
if (learning_language == spoken_language) {
return (userSnapshot.id);
}
})
})
console.log(ns_match);
})
如何在最后获取正确存储的数组?我觉得这是一个异步问题。
谢谢。
答案 0 :(得分:0)
如果我的理解正确,您想获取一个由以下条件过滤的userSnaphot
个文档数组:
learning_language == doc.data().spoken_language
这里的一种方法可能是使用Array#filter()方法来实现此目的,您将使用上面的匹配条件来筛选与所需learning_language
匹配的用户文档。
要获取过滤后的用户文档数组作为结果ns_match
变量,您将需要解析一个promise数组,并看到您正在为{{ 1}}数组。
您可以使用Promise.all()
函数来实现此目的,如以下注释中所述:
db.collection(ns_profile).doc(userSnapshot.id).get()
希望有帮助!