Почему Firestore onSnapshot не соответствует моему условию .where после обновления документа?

Почему Firestore onSnapshot не соответствует моему условию .where после обновления документа?

У меня есть следующая функция:

  getTodos = () ={amp}gt; { return new Promise((resolve, reject) ={amp}gt; { 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 ={amp}gt; { 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()); } }); }); }; 

Это только возвращает todos, если дата в документе совпадает с датой в моем местном штате. У меня созданы индексы, и все работает хорошо, пока документ не обновляется с изменением даты.

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

Я попытался отладить его, имея свои ограниченные знания, и мне удалось проигнорировать этот последний ответ, используя !querySnapshot.metadata.hasPendingWrites . Это работает, но прекращает прослушивание новых документов, созданных, которые соответствуют условию. Это сводит меня с ума.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector