如何退订包装在可观察的rxjs中的Firestore实时侦听器?

时间:2018-10-17 18:08:28

标签: firebase rxjs google-cloud-firestore

我编写了一个函数,该函数返回包装了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侦听器。

有什么方法可以使我退订可观察对象时自动退订onSnapshot方法。

1 个答案:

答案 0 :(得分:1)

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

  

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

因此,如果我了解这项权利,则可能要尝试与此类似的事情

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