Слушатель реального времени Firestore возвращает неопределенное значение после обновления значения в документе - PullRequest
0 голосов
/ 29 ноября 2018

В моем приложении есть коллекция, которая называется списками.У меня также есть слушатель в реальном времени, например, так (функция 1):

firebase.firestore().collection('lists').doc(listId)
.onSnapshot(listSnapshot => {
  if (listSnapshot.exists) {
    // Do something
  }
});

В другом месте у меня есть функция, которая обновляет каждый список в коллекции (функция 2):

firebase.firestore().collection('lists').get()
.then(querySnapshot => {
  querySnapshot.forEach(docSnapshot => {
  firebase.firestore().collection('lists').doc(docSnapshot.id).update({ modDate: Date.now() });
  });      
});

Под большинствомУсловия, функция 1 вызывается при запуске приложения.В этом случае документ, соответствующий listId, возвращается слушателем.Затем, через некоторое время, когда этот документ обновляется с помощью функции 2, это приводит к тому, что прослушиватель функции 1 снова запускается, возвращая обновленные значения для документа, соответствующего listId.Это все ожидаемое поведение.

Однако время от времени функция 2 фактически вызывается до или приблизительно одновременно с функцией 1 во время запуска.В этом случае обновление существующего документа с помощью функции 2 приводит к срабатыванию функции 1, но возвращает неопределенные значения (например, listSnapshot.exists имеет значение false) для документа, соответствующего listId.Теперь, если это было строго условие гонки, я мог видеть функцию 1, возвращающую старые значения для документа, соответствующего listId.Но я не получаю никаких значений вообще, что обычно происходит, когда документ был удален (не обновлен).

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

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