Akh*_*kla 2 javascript subscription observable angular
我正在使用Angular 5并使用该subscribe()方法订阅了一个observable .我想知道是否只调用unsubscribe()订阅上的方法就足以清理所有内容,或者我是否也应该调用remove()方法?
代码段:
`
// somewhere in a method
this.s1 = someObservable.subscribe((value) => {
//somecode
});
// in ngOnDestroy
this.s1.unsubscribe(); // should I also call .remove()
Run Code Online (Sandbox Code Playgroud)
`
.remove从内部列表中删除订阅,但不会取消订阅.
.unsubscribe清理所有内容,取消订阅并从内部列表中删除观察者.(有一个错误(已修复)没有从列表中删除观察者)
.takeWhile 保持订阅,因为某种情况 false
例:
this.service.method()
.subscribe(res => {
//logic
});
Run Code Online (Sandbox Code Playgroud)
这永远不会取消订阅.
this.service.method()
takeWhile(() => this.isAlive) // <-- custom variable setted to true
.subscribe(res => {
//logic
});
ngOnDestroy(){
this.isAlive = false;
}
Run Code Online (Sandbox Code Playgroud)
当组件将被销毁时自动取消订阅.
this.s1 = someObservable.subscribe((value) => {
//somecode
});
public yourMethod(){
this.s1.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)
这个订阅将存在并且"活着"直到yourFunction没有被调用.
-
我个人喜欢使用rxjs运算符takeWhile来保持代码清洁.在一个非常大的项目或具有多个订阅的单个组件中,令人困惑的是(IE)30 variables: Subscription.因此,如果您要问何时使用takeWhile运算符,我的答案是:(以一个订阅为例) - >如果您确定unsubscribe需要在组件被破坏时完成,请使用takeWhile.如果您需要在组件仍然"活着"的特定场景中取消订阅,请使用我编写的第二个示例.
希望能帮到你!