1

我想知道在以下情况下是否必须取消订阅。我使用combineLatest两个 angular observablesroute.paramsroute.queryParams. 为了将它们用作 http 请求中的参数,我调用switchMap并返回 http 请求的 observable。然后我描述这个 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));
4

2 回答 2

2

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

combineLastest将发出每个可观察者的最新值。两者都将随着您的路线变化而不断发出值this.route.paramsthis.route.queryParams因此,您也combineLatest将继续发出值。

于 2018-04-04T07:23:43.870 回答
2

switchMap退订方面没有任何改变。

但是您正在组合activatedRoute's 流的事实确实如此。看看这个答案

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

于 2018-04-04T07:24:06.317 回答