У меня есть следующая функция:
getTodos = () => {
return new Promise((resolve, reject) => {
let that = this;
this.listenTodos = firebase
.firestore()
.collection("todos")
.where("date", "==", startOfDay(this.state.currentDate))
.where("user", "==", firebase.auth().currentUser.uid)
.orderBy("created_at")
.onSnapshot(function (querySnapshot) {
if (querySnapshot) {
let todos = [];
querySnapshot.forEach(doc => {
let { title, complete, date, created_at } = doc.data();
todos.push({
key: doc.id,
docRef: doc.ref,
title,
complete,
date: date,
created_at
});
});
that.setState({
todos,
}, resolve());
}
});
});
};
Возвращает задачи только в том случае, если дата в документе совпадает с датой в моем местном штате. У меня созданы индексы, и все работает хорошо, пока документ не будет обновлен с изменением даты.
Если дата изменится, слушатель вернет правильные результаты пару раз, без документа, который больше не соответствуетусловия. Но затем он возвращает измененный документ и все другие документы с теми же датами, что безумие, так как эти документы не соответствуют моему where ().
Я пытался отладить его, с моими ограниченными знаниями иМне удалось проигнорировать этот последний ответ, используя !querySnapshot.metadata.hasPendingWrites
. Это работает, но прекращает прослушивание новых документов, созданных, которые соответствуют условию. Это сводит меня с ума.