我应该取消订阅 Angular 中的 pipe() 吗?

Sal*_*ery 1 rest observable angular

我读过一些关于 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);
      }));
}

Run Code Online (Sandbox Code Playgroud)

和组件使用带有销毁器的服务。

    //...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();
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ski 5

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

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