繁体   English   中英

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

[英]How to unsubscribe from Firestore realtime listener which is wrapped in an rxjs observable?

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

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

onSubscription可以选择使用unsubscribe方法返回函数或对象 在这两种情况下,取消对Observable的订阅时都将调用函数或方法,并且应将该函数或方法用于清理所有资源。 因此,例如,如果您在自定义Observable中使用setTimeout,则当某人取消订阅时,您可以清除计划的超时,这样它就不会不必要地启动,并且浏览器(或其他环境)不会浪费计时能力,因为没有人无论如何都会听。

因此,如果我了解这项权利,您可能想尝试类似的方法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM