需要取消订阅Firestore/Angularfire2订阅
我像这样使用Firestore 用例1:需要取消订阅Firestore/Angularfire2订阅,angular,firebase,ionic3,google-cloud-firestore,angularfire2,Angular,Firebase,Ionic3,Google Cloud Firestore,Angularfire2,我像这样使用Firestore 用例1: 联系人$:可见; 构造函数(){ } ionViewDidEnter(){ this.contacts$=this.contactProvider.getSpecificUserContacts(this.authenticationProvider.user.uid).valueChanges(); this.contacts$.pipe(first()).subscribe(res=>{}, err=>{}, () => { } ); } 用例2
联系人$:可见;
构造函数(){
}
ionViewDidEnter(){
this.contacts$=this.contactProvider.getSpecificUserContacts(this.authenticationProvider.user.uid).valueChanges();
this.contacts$.pipe(first()).subscribe(res=>{},
err=>{},
() => { }
);
}
用例2:
getAllContactCategories(){
this.categories$=this.categoryProvider.getAllContactCategories().valueChanges();
此.categories$.subscribe(res=>{
this.categorySortedList=res;
},
错误=>{}
);
}
但是我从来没有退订过它。那么我需要这样做吗?否则,会导致内存泄漏并耗尽电池使用量吗?
我知道我们不需要unsubscribed
angularHTTP
服务,因为它是由框架本身自动完成的。那么Firestore/Angularfire2可观测值呢?我从未在firestore书籍或文章等方面看到过这样的模式。通过使用操作员,您可以在最初触发订阅后直接自动取消订阅。但要回答你的具体问题
在订阅组件中的可观察对象时,几乎总是在组件被销毁时安排取消订阅。
有一些例外的观测结果是不必要的。ActivatedRoute观测值属于例外。
激活的路由及其可观察对象与路由器本身隔离。当不再需要路由组件时,路由器会将其销毁,注入的ActivatedRoute也随之消亡
无论如何都可以随意取消订阅。这是无害的,从来都不是一个坏习惯
从
通常,如果您希望控制何时取消订阅,可以将可观测值分配给变量
const subscription = this.subscription$.valueChanges().subscribe(...);
然后对新创建的变量调用unsubscribe
subscription.unsubscribe();
是的,取消订阅是很好的。你可以试试这个
contactsSub: Subscription;
构造函数(){
}
ionViewDidEnter(){
...
}
来自angularfire2代表:first()
在收到第一个值后自动取消订阅。好的,很高兴知道这一点。用例2呢@Jeffreyroosendali对firestore一无所知,只是想指出关于first()
。类似于take(N)
和'takeUntil(X)这样的管道也是如此。它有一个很好的“官方”解决方案,在选中标记的答案(takeUntil()
方法)中,我知道定制订阅事件的这种模式。但对于firestore/anglurafire2,如何处理?你有没有看到任何文档或类似的东西作为参考?@Sampath Angularfire使用RxJS observates。这里有一个官方文档的链接是的,AngularHTTP
服务也使用RxJS
。但我们不需要在那里手动操作。为什么我们需要它?我想看一份关于它的官方文件或文章。我还没找到答案。一些内置的角度观测值可以控制它们的生命周期,因此当调用组件onDestoy时,它们会自动取消订阅。在我脑海中,这些包括HTTPClient、路由器和其他一些。通常,如果它不是@angular sdk的一部分,您应该手动取消订阅。我看看是否能找到一些资源来支持我。@Sampath做了一些挖掘,我似乎找不到自动处理退订的完整列表,但你可以在我更新的答案中找到官方文档的摘录。希望这对您有所帮助,这对任何定制活动的订阅都有好处。我的具体问题是Firestore/Angularfire2
。有使用此模式的引用吗?
ionViewDidLeave{
this.contactsSub.unsubscribe();
}