如何通过change.type ==“added”从Firebase Firestore获取实时文档更新

问题描述 投票:0回答:1

我现在可以使用以下代码实时更新修改后的数据。我想要完成的是收听新文件,然后实时更新我的​​帖子。我相信它在第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)
  })
}
javascript firebase google-cloud-firestore
1个回答
1
投票

在我看来,问题在于您正在检查this.posts[i]是否等于添加的文档,根据定义,您的文档将不会包含在this.posts中,因为它是一个新文档。代码中没有任何内容可以使用新数据更新this.posts

也就是说,基于你的代码,我不确定我是否会费心去看docChanges。使用docChanges的关键是当你想要在doc更改时做一些非常具体的事情,比如在从数据中删除文档时添加淡出动画。你能简单地吹掉你的旧帖子数组并将新数组设置为等于你在快照监听器中找回的文件吗?

© www.soinside.com 2019 - 2024. All rights reserved.