.map中的Firestore .get()

时间:2019-04-02 20:22:35

标签: javascript firebase google-cloud-firestore

我有一个分为两步的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);
        })

如何在最后获取正确存储的数组?我觉得这是一个异步问题。

谢谢。

1 个答案:

答案 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()

希望有帮助!