switchMap到Angular HTTP-Request是否需要取消订阅

时间:2018-04-04 07:16:31

标签: angular rxjs subscription httpservice switchmap

我想知道在以下情况下是否必须取消订阅我的订阅。我使用两个角度可观察量combineLatestroute.params中的route.queryParams来创建一个可观察对象。 要将它们用作http请求中的参数,我调用switchMap并返回http请求的observable。 然后我描述了这个可观察的。

现在我想知道我是否需要处理订阅。 通常我不这样做,因为angular的http服务返回的observable在第一个值发出后完成。

在我目前的情况下,我不确定,因为原始的observable是通过调用combineLatest创建的。

// Somewhere within my component.

const subscription = combineLatest(this.route.params, this.route.queryParams).pipe(
  switchMap(([params, queryParams]: [Params, Params]) => this.http.get<number>(`query/path/${params.id}/${queryParams.type}`)
).subscribe(data => console.log(data));

2 个答案:

答案 0 :(得分:2)

是的,您需要取消订阅。这与您的开关地图无关,而是与您的combineLatests及其参数有关。

combineLastest将发出每个可观察者的最新值。当您的路线发生变化时,this.route.paramsthis.route.queryParams都会继续发出值。因此,您的combineLatest也会继续发行值。

答案 1 :(得分:2)

switchMap不会改变任何关于取消订阅的内容。

但是您正在组合activatedRoute的流。看看这个answer

  

订阅组件中的observable时,您几乎总是安排在销毁组件时取消订阅。   有一些特殊的可观测量,这是没有必要的。 ActivatedRoute可观察量是例外。   ActivatedRoute及其可观察对象与路由器本身绝缘。路由器在不再需要时会销毁路由组件,并且注入的ActivatedRoute会随之消失。