Firebase Realtime Listener Concept - как отсоединить / отписаться от слушателя? - PullRequest
1 голос
/ 24 апреля 2019

Получение обновлений в реальном времени с Cloud Firestore показывает, как подписаться или прослушать изменения документа.

db.collection("cities").doc("SF")
    .onSnapshot(function(doc) {
        console.log("Current data: ", doc.data());
    });

Приведенный выше пример имеет смысл.Мой вопрос касается отсоединения слушателя.Правильно ли говорить, что когда мы хотим отсоединить / отписаться / не прослушать документ, мы просто во второй раз подписываемся на одну и ту же ссылку на базу данных?

... вот как это выглядит, но я не совсем ясно, как и почему?

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

// Later ...

// Stop listening to changes
unsubscribe();

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

Итак, нижняя строка: чтобы отписаться, присоедините метод .onSnapshot к родительской коллекции и назначьте его переменной?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Мой вопрос касается отсоединения слушателя. Правильно ли сказать, что когда мы хотим отсоединить / отписаться / не прослушать документ, мы просто во второй раз подписываемся на одну и ту же ссылку на базу данных?

Вам не нужно подписываться дважды.

Первоначальная подписка, которую вы сделали, возвращает функцию, которая при вызове отписывается от вас. Вы не добавляете этот код второй раз, вместо этого сохраняете возвращаемое значение из начального вызова коллекции в переменную и вызываете ее, когда вы намереваетесь отписаться.

Представьте себе что-то вроде этого:

function subscribe() {
  ... do things that subscribe me
  return function() {
    ... do things that unsubscribe me
  }
}

let unsubscribe = subscribe()

// later when I want to unsubscribe
unsubscribe()
0 голосов
/ 24 апреля 2019

Да, согласно документации , вам просто нужно вызвать эту функцию unsubscribe, чтобы отказаться от подписки.Переменная, которую возвращает ваш слушатель, на самом деле является регистрацией слушателя (подробности см. Ниже), поэтому вызывать ее для отмены регистрации имеет смысл.

Это действительно довольно запутанно, но, поскольку у меня аналогичная настройка на Androidи способ отказа от подписки в Android - это вызов метода remove () для экземпляра ListenerRegistration (та же самая переменная отмены подписки в Интернете), я бы сказал, что это только проблема дизайна для Интернета.

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