有什么方法可以暂停 firestore 侦听器而不删除它?

2023-12-01

有什么方法可以暂停 firestore 侦听器而不删除它?

我有多个 Firebase 侦听器,其中一些侦听器依赖于其他侦听器,这些侦听器会在数据更改时更改或启动其他侦听器。假设我的第一个监听器启动了第二个监听器onSnapshot。第一个听众开始于useEffect。对于某些情况,我可能不想更改第二个侦听器,因此我需要放弃第一个侦听器的数据更改更新。

如果满足条件(单击按钮),我会暂时丢弃第一个侦听器上的数据更改。目前我正在使用布尔值来执行此操作useRef。我的反应应用程序工作正常,有这样的依赖侦听器。我可以删除侦听器,但我不想删除并重新创建侦听器。

我想知道是否有适用于任何听众的暂停机制或方法。我认为如果有这样的方法,它将节省一点点读取成本,因为我没有使用在快照上发送的数据。

代码示例:

useEffect(() => {
let  firstListener, secondListener;
//console.log("useEffect...");

function ListenerFunc(p) {
 secondListener = await firestore
    .collection("test") 
    .doc(p)
    .onSnapshot((doc) => {
      //console.log("Current data: ", doc.data());

      //Need to discard unwanted change here. 
      //Changing it on button click for a 2 seconds then it changes back to : pauser.current = false.
      if (pauser.current) {
        console.log("paused for a moment.");
        //pauser.current = false;
        return;
      }
    else {
          //update.
         }
    })
  }

 firstListener = firestore
        .collection("test")
        .doc("tab")
        .onSnapshot((doc) => {
          //console.log("Current data: ", doc.data()); 
          var p = doc.data().p; //get variable p

          ListenerFunc(p);
        });
  // cleanup.
}

不幸的是这是不可能的。如果您需要停止监听更改,即使是暂时的,您也必须分离监听器并在想要再次开始监听时附加一个新的监听器,监听器没有暂停机制。

您可以在以下位置打开功能请求Google 的问题跟踪器如果您愿意,产品团队可以考虑这一点,但考虑到这已经在此提出IOS SDK 的 GitHub 功能请求但它被拒绝了,我认为这种情况不会很快改变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么方法可以暂停 firestore 侦听器而不删除它? 的相关文章