【问题标题】:Issue while updating array items inside firebase database更新firebase数据库中的数组项时出现问题
【发布时间】:2020-05-25 05:09:03
【问题描述】:

我正在开发一个简单的购物车应用程序。

我想添加/更新/删除用户购物车项目。

如果已经添加了项目,我只想更新数量而不是添加重复条目:

const arrayAdd = firebase.firestore.FieldValue.arrayUnion;
const arrayRemove = firebase.firestore.FieldValue.arrayRemove;

this.auth.uid.subscribe(uid => {
      if (uid) {
        this.firestore
          .collection(`users`)
          .doc(uid)
          .valueChanges()
          .subscribe((res) => {
            this.getUserData = res;
            if (this.getUserData.cart && this.getUserData.cart.length) {
              const productExistInCart = this.getUserData.cart.find(({ productName }) => productName === product.productName);
              if (!productExistInCart) {
                this.firestore.doc(`users/${uid}`).update({ cart: arrayAdd(product) });
                return
              } else {
                this.firestore.doc(`users/${uid}`).update({ cart: arrayRemove(productExistInCart) });
                this.firestore.doc(`users/${uid}`).update({ cart: arrayAdd(product) });
                return
              }
            } else {
              this.firestore.doc(`users/${uid}`).update({ cart: [product] })
              return
            }

          });
      }
    });

问题是,当我单击现有项目的addToCart 按钮时,我的数据库正在无限循环中更新,不确定我在这里做错了什么。请帮忙

【问题讨论】:

    标签: angular typescript firebase google-cloud-firestore


    【解决方案1】:

    您在用户集合中的文档上有一个侦听器:

            this.firestore
              .collection(`users`)
              .doc(uid)
              .valueChanges()
    

    当这个监听器触发时,它会再次更新文档几次:

                  if (!productExistInCart) {
                    this.firestore.doc(`users/${uid}`).update({ cart: arrayAdd(product) });
                    return
                  } else {
                    this.firestore.doc(`users/${uid}`).update({ cart: arrayRemove(productExistInCart) });
                    this.firestore.doc(`users/${uid}`).update({ cart: arrayAdd(product) });
                    return
                  }
    

    这些更新中的每一个都会再次触发监听器,因为很明显,文档发生了变化。

    您将不得不停止使用侦听器,或者弄清楚如何告诉侦听器不要进行会进一步触发它进行更多更改的更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多