Я устанавливаю прослушиватель для обновлений на определенной странице в моем приложении. Мне нужно, чтобы, когда пользователь покидает страницу, он отказывался от подписки на обновления этой страницы.
Из того, что я читаю, я просто вызываю список, который я только что установил как функцию? Это кажется довольно странным без фактического вызова определенного метода. Я бы не стал возражать, но я не могу заставить его работать.
В документации приведен этот пример того, как отписаться:
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()
, но получаю сообщение об ошибке, говорящее, что это не доступный метод