subscription.unsubscribe()和subscription.remove()有什么区别?

时间:2018-11-22 10:13:29

标签: javascript angular observable subscription

我正在使用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 个答案:

答案 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,请使用同时。如果您需要在某个组件仍处于“活动状态”的特定情况下退订,请使用我编写的第二个示例。

希望能帮助您!