【问题标题】:Firestore onSnapshot returns undefinedFirestore onSnapshot 返回未定义
【发布时间】:2019-09-20 19:59:16
【问题描述】:

我有一个从 Firestore 获取数据的函数,但总是返回 undefined。我之前使用过 .get() 方法,但我希望在数据库获取一些新数据时自动更新我的数据。

我知道 .onSnapshot() 不会返回承诺,因此不能选择使用异步。

getdata = (dbRef) => {
                dbRef.onSnapshot(snapshot => {
            console.log(snapshot);
            return snapshot;
        });
    }

日志在控制台中显示快照,但是当我调用该函数时,它返回未定义

【问题讨论】:

    标签: javascript firebase react-native google-cloud-firestore


    【解决方案1】:

    你的问题不是很清楚。如果您尝试获取实时更新,那么您可以使用此文档中的此模型 https://firebase.google.com/docs/firestore/query-data/listen

    db.collection("cities").doc("SF")
    .onSnapshot(function(doc) {
        console.log("Current data: ", doc.data());
    });
    

    如果您尝试获取一次性数据,请使用此文档中的此模型https://firebase.google.com/docs/firestore/query-data/get-data

    docRef.get().then(function(doc) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }
    

    我认为文档对此非常清楚。

    顺便说一句,我确信实时更新的 onSnapshot 也是异步的。如果您想获得实时更新,那么您将无法使用它。对于函数,使用一次性数据模型。这是一个非常好的实时更新示例

    http://jsfiddle.net/katowulf/cw7dgs8a/

    【讨论】:

      【解决方案2】:

      你可以在这个链接"listen realtime updates"阅读教程

      db.collection("cities")
          .onSnapshot(function(querySnapshot) {
              let cities = [];
              querySnapshot.forEach(function(doc) {
                  cities.push(doc.data());
              });      
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        相关资源
        最近更新 更多