如何退订Firestore侦听器?

时间:2020-04-19 05:08:39

标签: javascript firebase google-cloud-firestore

我正在为应用程序的特定页面上的更新设置侦听器。我需要当用户离开页面时,他们将退订该页面的更新。

从我正在阅读的内容中,我只是称呼刚刚设置为函数的监听器?没有实际调用某种方法似乎很奇怪。我本来不会介意的,但是我无法使其正常工作。

文档给出了如何取消订阅的示例:

     var unsubscribe = db.collection("cities")
            .onSnapshot(function (){
              // Respond to data
              // ...
            });

        // Later ...

        // Stop listening to changes
        unsubscribe();

我又觉得有点奇怪,因为unsubscribe是侦听器本身。将其称为s函数以使侦听器停止似乎有点直观。

无论如何,这就是我的听众的设置方式。

首先,我只是在所有函数之外声明它:

let multiverseListener;

然后我有一个功能,可以根据我所在的页面(房间)开始收听:

  multiverseListener = db
    .collection("multiverses")
    .doc(roomID)
    .onSnapshot((docMultiverse) => {
      if (docMultiverse.data()) {
        setMultiverse(docMultiverse.data());

        const arrayVerse = Object.values(docMultiverse.data());
        console.log(arrayVerse);

        setMultiverseArray(arrayVerse.sort(compare));
      } else {
        newPortal();
      }
    });

然后,在用户离开页面时调用的另一个函数上,我执行以下操作:

export const detachListener = () => () => {
  if (multiverseListener) multiverseListener();
};

但是它并没有完全阻止它。即使返回首页,我仍会不断获取该页面的更新。

我也尝试过multiverseListener.remove(),但收到一条错误消息,说它不是可用的方法

0 个答案:

没有答案