switchMap to Angular HTTP-Request 是否需要退订

Does switchMap to Angular HTTP-Request needs unsubscribe

我想知道在以下情况下是否必须取消订阅。我使用两个 angular 可观察对象 route.paramsroute.queryParams 中的 combineLatest 创建一个可观察对象。 为了将它们用作 http 请求中的参数,我将 switchMap 和 return 称为 http 请求的可观察对象。 然后我对这个observable进行描述。

现在我想知道我是否必须处理订阅。 通常我不这样做,因为 angular 的 http 服务在第一个值发出后完成了可观察的 return。

在我目前的情况下,我不确定,因为原始可观察对象是通过调用 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));

是的,您需要退订。这与您的开关映射没有任何关系,但与您的 combineLatests 及其参数有关。

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

switchMap 在取消订阅方面没有任何改变。

但事实上您正在合并 activatedRoute 的流。看看这个 .

When subscribing to an observable in a component, you almost always arrange to unsubscribe when the component is destroyed. There are a few exceptional observables where this is not necessary. The ActivatedRoute observables are among the exceptions. The ActivatedRoute and its observables are insulated from the Router itself. The Router destroys a routed component when it is no longer needed and the injected ActivatedRoute dies with it.