有什么方法可以暂停 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(使用前将#替换为@)