В моем приложении есть коллекция, которая называется списками.У меня также есть слушатель в реальном времени, например, так (функция 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 всегда выполнялась только после первой, но я 'Я хотел бы понять корень проблемы.