我应该退订Angular中的pipe()吗?

时间:2020-03-27 13:14:10

标签: angular rest observable

我已经阅读了一些有关Observable和退订的文章。但是我不了解关于pipe()的信息。管道在某些情况下会自动退订。这些是什么情况我有一项服务可用于连接服务器和一个组件。我应该在这里退订并使用ngOnDestroy吗?它为CRUD应用程序提供了简单的服务。

例如,服务中的一种方法:

public getSubject(size:number, page:number) : Observable<Subject[]> {
  return this.http.get<Subject[]>(environment.apiUrl + '/subject?size='+size+'&page='+page)
    .pipe(
      map(data=>{
        return  data;
      }),
      catchError(err => {
        return throwError(err);
      }));
}

以及将组件与驱逐舰一起使用的服务。

    //...some code
pageClick() {
  this.subscriptions.add(this.connector.getSubject(this.pageSize, this.page - 1)
    .subscribe(data => {                                                                        
      this.subject = data;                                                                                  
      this.errorFlag = false;

    }, error => {                                                             
      this.error = error.error.message;                                                                                          
      this.errorFlag = true;

    }));
}
    //..some code..

@HostListener('window:beforeunload')
ngOnDestroy() {
  this.subscriptions.unsubscribe();
}

1 个答案:

答案 0 :(得分:4)

无需取消订阅已完成的Observable。当HttpClient从服务器获取响应并将其发出给Observable组件中的订阅时,该响应就完成了,因此不再发出任何值。如果不发送值,则不会有内存泄漏的风险,这就是取消订阅的原因。

“管道在某些情况下会自动取消订阅”- .pipe 用于通过向数据流添加一些运算符来修改数据流。它不负责订阅或取消订阅。