【问题标题】:How to unsubscribe from Firestore realtime listener which is wrapped in an rxjs observable?如何取消订阅包含在 rxjs 可观察对象中的 Firestore 实时侦听器?
【发布时间】:2019-03-22 12:02:15
【问题描述】:

我编写了一个函数,它返回一个包装了 firestore onSnapshot 方法的 observable。

function getObservable() {
  return Observable.create(observer => {
      firebase.firestore().collection('users').onSnapshot(
        snapshot => observer.next(snapshot.docs),
      );
    });
  })
}

我可以使用此功能并获取更新的文档,如下所示

const observable = getObservable()
const subscription = observable.subscribe(users => console.log('users'));

如果我现在调用subscription.unsubscribe() 方法,我将取消订阅。但是,我不会订阅 onSnapshot 监听器。

有什么方法可以让我在取消订阅 observable 时,自动取消订阅 onSnapshot 方法。

【问题讨论】:

标签: firebase rxjs google-cloud-firestore


【解决方案1】:

来自 RxJS 文档 (http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-create):

onSubscription 可以选择返回函数或对象 使用取消订阅方法。在这两种情况下,函数或方法都将是 当订阅 Observable 被取消时调用并且应该 用于清理所有资源。因此,例如,如果您正在使用 setTimeout 在你的自定义 Observable 中,当有人退订时,你 可以清除计划的超时,使其不会不必要地触发并且 浏览器(或其他环境)不会浪费计算能力 反正没人会听的计时事件。

所以,如果我理解这一点,你可能想尝试类似的东西

function getObservable() {
  return Observable.create(observer => {
      const unsubscribe = firebase.firestore().collection('users').onSnapshot(
        snapshot => observer.next(snapshot.docs),
      );
      return unsubscribe;
    });
  })
}

【讨论】:

猜你喜欢
  • 2020-07-05
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2018-01-19
  • 2018-06-23
  • 1970-01-01
  • 2021-03-16
  • 2022-10-17
相关资源
最近更新 更多