使用 Firestore 清理快照

Posted

技术标签:

【中文标题】使用 Firestore 清理快照【英文标题】:Cleaning up a snapshot with firestore 【发布时间】:2021-11-24 08:47:43 【问题描述】:

我目前正在为我的 BAAS 使用 firestore/firebase,并且正在努力从集合中获取一些数据。我有数据渲染和通信正常但是我不知道如何正确清理我的效果挂钩。

我读到 firestore 有一个内置的方法来使用 onsnapshot 功能,但我无法弄清楚。

这是对 firestore 数据库的实际 API 调用:

  getBuds: async (uid) => 
    try 
      const snapshot = await db
        .collection('users')
        .doc(uid)
        .collection('buds')
        .get();
      return snapshot.docs.map((doc) => doc.data());
     catch (error) 
      console.log('Error @getBuds ', error);
    
  ,

这是调用它的效果函数:

useEffect(() => 
    firebase
      .getBuds(user.uid)
      .then((res) => setBuds(res))
      .catch((err) => console.log(err));
  , [buds]);

请帮我清理一下!!!我会很感激的

更新** 因此,我使用 onsnapshot 函数修改了原始代码,并设法从火存储中提取我想要的数据,我正在获取每个文档并使用此代码将每个文档推送到一个数组中。但是我现在似乎无法将此代码放入我调用“getBuds”方法的组件中:(

这是更新后的 getBuds:

getBuds: async (uid) => 
    let unsubscribe;

    try 
      const budData = [];

      unsubscribe = await db
        .collection('users')
        .doc(uid)
        .collection('buds')
        .onSnapshot((snapshot) => 
          snapshot.forEach((doc) => 
            budData.push(doc.data());
          );
          console.log(budData);
          return budData;
        );
     catch (error) 
      console.log('Error @getBuds ', error);
    
  ,

【问题讨论】:

【参考方案1】:

您可以使用onSnapshot 监听器的取消订阅方法:

let unsubscribe;

getRealtimeUpdates = function(document) 
        unsubscribe = firestore.collection("collection_name")
            .onSnapshot(function(querySnapshot) 
            querySnapshot.forEach(function(doc) 
                if (doc && doc.exists) 
                    const myData = doc.data();
                    // DO SOMETHING
                
            );
        );
    
  
  // unsubscribe:
  
  unsubscribe();

更多信息请关注Firestore unsubscribe to updates

【讨论】:

OP 没有使用监听器。 那就没什么好清理的了。 我已经尝试使用 onSnapshot 方法,但似乎无法让它正确返回数据,而不是我上面的数据。您能否更具体地说明如何进入我上面的代码? 可以参考这个链接:***.com/questions/56450975/… 有用吗?

以上是关于使用 Firestore 清理快照的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 StreamProvider 检查 Firestore 快照流的 ConnectionState?

Firestore 分页数据 + 快照监听器

Firestore 查询返回未定义快照的位置(Vue.js / Firestore / Vuefire)

使用python在Firestore中运行GeoPoint

Flutter中的Firestore快照侦听器数据重复问题

Flutter:Firebase 身份验证和 Firestore 快照流