Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript subscription.unsubscripte()和subscription.remove()之间有什么区别?_Javascript_Angular_Observable_Subscription - Fatal编程技术网

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

Javascript subscription.unsubscripte()和subscription.remove()之间有什么区别?,javascript,angular,observable,subscription,Javascript,Angular,Observable,Subscription,我正在使用Angular 5,并使用subscribe()方法订阅了一个可观测值。我想知道,对订阅仅调用unsubscribe()方法是否足以清除所有内容,还是我还应该调用remove()方法 代码段: ` `。删除从内部列表中删除订阅,但它不会取消订阅 this.service.method() takeWhile(() => this.isAlive) // <-- custom variable setted to true .subscribe(res =&g

我正在使用Angular 5,并使用
subscribe()
方法订阅了一个可观测值。我想知道,对订阅仅调用
unsubscribe()
方法是否足以清除所有内容,还是我还应该调用
remove()
方法

代码段:

`


`
。删除
从内部列表中删除订阅,但它不会取消订阅

this.service.method()
    takeWhile(() => this.isAlive) // <-- custom variable setted to true
    .subscribe(res => {
      //logic
    });

ngOnDestroy(){
    this.isAlive = false;
}
.unsubscribe
清除所有内容,执行取消订阅操作,并将观察员从内部列表中删除。(有一个bug(已修复)没有将观察者从列表中删除)

.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;
}
此订阅将存在并“活动”,直到未调用
yourFunction

--

我个人喜欢使用rxjs操作符
takeWhile
来保持代码干净。在一个非常大的项目或具有多个订阅的单个组件中,有(IE)30个
变量:订阅是令人困惑的。因此,如果您询问何时使用
takeWhile
操作符,我的回答是:(以一个订阅为例)->如果您确定组件销毁时需要执行
取消订阅,请使用takeWhile。如果您需要在组件仍然“活动”的特定场景中取消订阅,请使用我编写的第二个示例

希望能澄清这个论点

   this.s1 = someObservable.subscribe((value) => {
        //somecode
    });

public yourMethod(){
    this.s1.unsubscribe();
}