Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Angular 如何摧毁一个可观测的_Angular_Typescript_Rxjs - Fatal编程技术网

Angular 如何摧毁一个可观测的

Angular 如何摧毁一个可观测的,angular,typescript,rxjs,Angular,Typescript,Rxjs,我已经在我的服务中建立了一个可观察的,以便每2秒轮询一次API的更新;可观察的是持久的,但当我移动页面或调用不同的结果时,我需要销毁它 是否有人可以帮助您在页面退出时或作为手动请求(例如,从另一个API调用)销毁可观察对象 您可以使用RxJS中的takeUntil。takeUntil将停止订阅。 请参见下面的示例 class myComponent { private destroyed$: ReplaySubject<boolean> = new ReplaySubject(1

我已经在我的服务中建立了一个可观察的,以便每2秒轮询一次API的更新;可观察的是持久的,但当我移动页面或调用不同的结果时,我需要销毁它

是否有人可以帮助您在页面退出时或作为手动请求(例如,从另一个API调用)销毁可观察对象


您可以使用RxJS中的
takeUntil
。takeUntil将停止订阅。 请参见下面的示例

class myComponent {
  private destroyed$: ReplaySubject<boolean> = new ReplaySubject(1);

  ngOnInit() {
    return Observable.interval(2000).switchMap(() => {
      return super.doRequest('/audit/api/' + this.API_version + '/Query/GetFlowHistory?sagaId=' + sagaId, 'get', {}).map((responseData) => {
        return responseData
      });
    }).takeUntil(this.destroyed$)
  }

  destroy() {
    this.destroyed$.next(true);
    this.destroyed$.complete();
  }
}
类myComponent{
private destromed$:ReplaySubject=新ReplaySubject(1);
恩戈尼尼特(){
返回可观察。间隔(2000)。开关映射(()=>{
返回super.doRequest('/audit/api/'+this.api_version+'/Query/GetFlowHistory?sagaId='+sagaId,'get',{}).map((responseData)=>{
返回响应数据
});
}).takeUntil(此.destromed$)
}
销毁{
此.next(true)已销毁$;
此.complete$.complete();
}
}

您可以使用RxJS中的
takeUntil
。takeUntil将停止订阅。 请参见下面的示例

class myComponent {
  private destroyed$: ReplaySubject<boolean> = new ReplaySubject(1);

  ngOnInit() {
    return Observable.interval(2000).switchMap(() => {
      return super.doRequest('/audit/api/' + this.API_version + '/Query/GetFlowHistory?sagaId=' + sagaId, 'get', {}).map((responseData) => {
        return responseData
      });
    }).takeUntil(this.destroyed$)
  }

  destroy() {
    this.destroyed$.next(true);
    this.destroyed$.complete();
  }
}
类myComponent{
private destromed$:ReplaySubject=新ReplaySubject(1);
恩戈尼尼特(){
返回可观察。间隔(2000)。开关映射(()=>{
返回super.doRequest('/audit/api/'+this.api_version+'/Query/GetFlowHistory?sagaId='+sagaId,'get',{}).map((responseData)=>{
返回响应数据
});
}).takeUntil(此.destromed$)
}
销毁{
此.next(true)已销毁$;
此.complete$.complete();
}
}

如果您退订了怎么办?如果您退订了怎么办?可能会重复您的建议?非常感谢!特别是相关的例子很好的建议非常感谢!特别是相关的例子