【问题标题】:Firebase Firestore Unsubscribe to SnapShot in for loopFirebase Firestore 在 for 循环中取消订阅 SnapShot
【发布时间】:2020-06-13 07:58:12
【问题描述】:

我正在使用 firebase firestore,并且我从集合中获取了一组数据,这些数据是我在 for 循环中的快照中获取的。

为了避免多次查询数据库,我创建了数据服务机制来使用本地数组来显示,我正在通过 rxjs 主题行为来处理它。

这里的问题是,如果用户从应用程序中删除了一些文档,我已经从 firebase 中删除了它,然后从本地仍然是它的快照,我们必须手动取消订阅

我知道这样的基本方法..

var unsubscribe = db.collection("cities")
    .onSnapshot(function () {});
// ...
// Stop listening to changes
unsubscribe();

这不适用于我的情况,因为我正在像这样在 for 循环中拍摄快照

   getSnapShot() {
        this.global.currentUser.shortlist.forEach((propertyID: any) => {
          this.getSnapShotByID(ID);
        });
      }
    getSnapShotByID(ID) {
        // return new Observable((observe: Observer<any>) => {
        this.db.collection('properties').doc(propertyID).onSnapshot((snapshot: any) => {
//HERE I AM ADDING PROPERTY IN LOCAL ARRAY
    ....
    }

现在当用户从集合中删除属性时,我必须取消订阅,否则它将继续监听并更改我的本地数组

有什么建议吗?

【问题讨论】:

    标签: angular firebase google-cloud-firestore


    【解决方案1】:

    对于您的用例,我可以推荐以下方法

    当您获取 RXJS 主题中的整个数据副本时。在 for 循环中发生删除的地方,删除现有 Rxjs 行为主题中不需要的数据,并在删除后再次使用 next 运算符重新推送新数据。因此,您的 observable 也会使用最新数据以及 firebase 数据库进行更新

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2019-04-09
      • 1970-01-01
      • 2018-09-26
      • 2017-12-06
      • 1970-01-01
      相关资源
      最近更新 更多