Почему Firestore onSnapshot не соответствует моему условию .where после обновления документа? - PullRequest
0 голосов
/ 19 октября 2019

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

  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. Это работает, но прекращает прослушивание новых документов, созданных, которые соответствуют условию. Это сводит меня с ума.

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