subscription.unsubscribe()和subscription.remove()有什么区别?(涉及IT技术)

8
我正在使用 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()

`

1个回答

12

.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以保持代码清洁。在一个非常大的项目或单个组件中有多个订阅时,拥有(例如)30个变量:Subscription会很混乱。因此,如果您想知道何时使用takeWhile操作符,我的答案是:(以一个订阅为例)-> 如果您确定unsubscribe需要在组件销毁时执行,请使用takeWhile。如果您需要在组件仍然“活动”时取消订阅,请使用我写的第二个示例。

希望已经澄清了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接