我像这样使用Firestore。
用例1:
contacts$: Observable<ContactDetail[]>;
constructor(){
}
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();
this.categories$.subscribe(res => {
this.categorySortedList = res;
},
err => { }
);
}
但是我从来没有unsubscribed
。那我需要这样做吗?否则会导致内存泄漏并消耗电池电量吗?
我知道我们不需要unsubscribed
有角度的HTTP
服务,因为它是由框架本身自动完成的。那Firestore / Angularfire2 observables
呢?我从来没有见过这样的模式与消防处的书籍或文章之类的东西。
答案 0 :(得分:2)
是的,最好取消订阅已订阅的订阅。你可以试试这个...
contactsSub: Subscription;
constructor(){
}
ionViewDidEnter(){ ... }
ionViewDidLeave{
this.contactsSub.unsubscribe();
}
来自angularfire2代表: https://github.com/angular/angularfire2/issues/377
答案 1 :(得分:1)
通过使用first()运算符,您将在最初触发订阅后直接自动退订。但是要回答您的特定问题。
订阅组件中的可观察对象时,几乎总是在组件被破坏时取消订阅。 有一些不需要观察的异常观测值。可以看到ActivatedRoute的可观察项。 ActivatedRoute及其可观察物与路由器本身绝缘。当不再需要路由组件并且注入的ActivatedRoute随之死亡时,Router会销毁它。
随时可以退订。这是无害的,绝不是坏习惯。。
来自https://angular.io/guide/route
通常,如果您希望控制何时取消订阅,可以将可观察对象分配给变量
const subscription = this.subscription$.valueChanges().subscribe(...);
然后在新创建的变量上调用unsubscribe。
subscription.unsubscribe();