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

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)

`

Jac*_*mpi 7

.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.如果您需要在组件仍然"活着"的特定场景中取消订阅,请使用我编写的第二个示例.

希望能帮到你!