我可以从
paramMap
获取参数:
this.route.paramMap.subscribe((params: ParamMap) => {
this.templateService.get(+params.get("id")!).subscribe((response: Json | JsonError) => {
...
});
});
也可以通过以下方式:
this.route.paramMap
.pipe(
switchMap((params: ParamMap) => this.templateService.get(+params.get('id')!))
)
.subscribe((response: Json | JsonError) => {
...
});
但是有什么区别呢?什么方法是正确的(或者说什么方法适合什么情况)?
与嵌套订阅相比,
switchMap()
方法有几个好处:
switchMap()
将自动忽略内部可观察值的发射,这很难通过嵌套订阅来实现。这可以避免在您的示例中当推送新参数而来自 templateService
的请求仍处于待处理状态时可能发生的竞争条件。对于嵌套的 Observables,待处理的请求将继续,并且响应将被处理,而对于 switchMap()
,待处理的请求将被忽略(甚至可能被取消)。您可以在
RxJS 文档中阅读有关
switchMap()
的更多信息。