Как отписаться от слушателя Firestore? - PullRequest
0 голосов
/ 19 апреля 2020

Я устанавливаю прослушиватель для обновлений на определенной странице в моем приложении. Мне нужно, чтобы, когда пользователь покидает страницу, он отказывался от подписки на обновления этой страницы.

Из того, что я читаю, я просто вызываю список, который я только что установил как функцию? Это кажется довольно странным без фактического вызова определенного метода. Я бы не стал возражать, но я не могу заставить его работать.

В документации приведен этот пример того, как отписаться:

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

        // Later ...

        // Stop listening to changes
        unsubscribe();

Что опять-таки кажется мне немного странным вещь, потому что unsubscribe это сам слушатель. Вызов его как функции для остановки слушателя кажется немного интуитивным.

Во всяком случае, так настроен мой слушатель.

Сначала я просто объявляю его вне всех функций:

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(), но получаю сообщение об ошибке, говорящее, что это не доступный метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...