我想知道在以下情况下是否必须取消订阅我的订阅。我使用两个角度可观察量combineLatest
和route.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));
答案 0 :(得分:2)
是的,您需要取消订阅。这与您的开关地图无关,而是与您的combineLatests及其参数有关。
combineLastest
将发出每个可观察者的最新值。当您的路线发生变化时,this.route.params
和this.route.queryParams
都会继续发出值。因此,您的combineLatest
也会继续发行值。
答案 1 :(得分:2)
switchMap
不会改变任何关于取消订阅的内容。
但是您正在组合activatedRoute
的流。看看这个answer。
订阅组件中的observable时,您几乎总是安排在销毁组件时取消订阅。 有一些特殊的可观测量,这是没有必要的。 ActivatedRoute可观察量是例外。 ActivatedRoute及其可观察对象与路由器本身绝缘。路由器在不再需要时会销毁路由组件,并且注入的ActivatedRoute会随之消失。