switchMap to Angular HTTP-Request 是否需要退订
Does switchMap to Angular HTTP-Request needs unsubscribe
我想知道在以下情况下是否必须取消订阅。我使用两个 angular 可观察对象 route.params
和 route.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.params
和 this.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.
我想知道在以下情况下是否必须取消订阅。我使用两个 angular 可观察对象 route.params
和 route.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.params
和 this.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.