Как получить обновления документов в реальном времени из Firebase Firestore с помощью change.type == "добавлено" - PullRequest
0 голосов
/ 19 февраля 2019

В настоящее время я могу в реальном времени обновлять измененные данные с помощью следующего кода.Я пытаюсь прослушать добавленные новые документы, а затем обновлять мои сообщения в реальном времени.Я считаю, что это в строке 8 // прослушивать новые документы, которые вызывают проблемы.

getPosts() {
  this.posts = [];

  let loading = this.loadingCtrl.create({
    content: "Loading Feed..."
  });

  loading.present();

  let query = firebase.firestore().collection("posts").orderBy("created", "desc").limit(this.pageSize);

  query.onSnapshot((snapshot) => {
    let changedDocs = snapshot.docChanges();

    changedDocs.forEach((change) => {

      if (change.type == "added") {
        console.log("New Message: ", change.doc.data());
        for (let i = 0; i < this.posts.length; i++) {
          // if (this.posts[i].id === change.doc.id) {
          if (change.doc.isEqual(this.posts[i])) {
            this.posts[i] = change.doc;
          }
        }
      }


      if (change.type == "modified") {
        console.log("Modified Message: ", change.doc.data());
        for (let i = 0; i < this.posts.length; i++) {
          if (this.posts[i].id == change.doc.id) {
            this.posts[i] = change.doc;
          }
        }
      }

    })
  })

query.get()
  .then((docs) => {

    docs.forEach((doc) => {
      this.posts.push(doc);
    })

    loading.dismiss();

    this.cursor = this.posts[this.posts.length - 1];

    console.log(this.posts);

  }).catch((err) => {
    console.log(err)
  })
}

1 Ответ

0 голосов
/ 25 февраля 2019

Мне кажется, проблема в том, что вы проверяете, равняется ли this.posts[i] добавленному документу, и по определению ваш документ не будет включен в this.posts, так как это новый документ.В коде нет ничего, что обновит this.posts новыми данными.

Тем не менее, основываясь на вашем коде, я не уверен, что даже потрудился бы взглянуть на docChanges.Смысл использования docChanges - это когда вы хотите сделать что-то очень специфичное при изменении документа, например, добавить затухающую анимацию, когда документ удален из ваших данных или что-то в этом роде.Можете ли вы просто сдуть старый массив записей и установить новый массив равным документам, которые вы возвращаете в прослушивателе снимков?

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