我正在使用Angular 5,并且已经使用subscribe()
方法订阅了一个可观察对象。我想知道仅调用订阅上的unsubscribe()
方法是否足以清理所有内容,还是我也应该调用remove()
方法?
代码段:
`
// somewhere in a method
this.s1 = someObservable.subscribe((value) => {
//somecode
});
// in ngOnDestroy
this.s1.unsubscribe(); // should I also call .remove()
`
答案 0 :(得分:5)
.remove
从内部列表中删除订阅,但不取消订阅。
.unsubscribe
清理所有内容,取消订阅并从内部列表中删除观察者。 (有一个错误(已修复)并没有从列表中删除观察者)
.takeWhile
使订阅有效,因为某些情况为false
示例:
this.service.method()
.subscribe(res => {
//logic
});
这将永远不会退订。
this.service.method()
takeWhile(() => this.isAlive) // <-- custom variable setted to true
.subscribe(res => {
//logic
});
ngOnDestroy(){
this.isAlive = false;
}
组件将被销毁时自动退订。
this.s1 = someObservable.subscribe((value) => {
//somecode
});
public yourMethod(){
this.s1.unsubscribe();
}
此订阅将存在并且一直有效,直到未调用yourFunction
。
-
我个人喜欢使用rxjs运算符takeWhile
来保持代码干净。在一个具有多个订阅的大型项目或单个组件中,令人困惑的是(IE)30 variables: Subscription
。因此,如果您问何时使用takeWhile
运算符,我的回答是:(以一个订阅为例)->如果您确定销毁组件时需要完成unsubscribe
,请使用同时。如果您需要在某个组件仍处于“活动状态”的特定情况下退订,请使用我编写的第二个示例。
希望能帮助您!