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