如何正确订阅observable paramMap Angular?

问题描述 投票:0回答:1

我可以从

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) => {
    ...
  });

但是有什么区别呢?什么方法是正确的(或者说什么方法适合什么情况)?

angular angular-routing angular-router angular-router-params
1个回答
0
投票

与嵌套订阅相比,

switchMap()
方法有几个好处:

  1. 只有一个订阅,所以如果您需要处理取消订阅,会更容易。
  2. 如果需要组合 2 个以上的 Observable,嵌套订阅将导致每个 Observable 的嵌套级别增加,这使得代码更难阅读。
  3. 一旦发出新的外部值,
    switchMap()
    将自动忽略内部可观察值的发射,这很难通过嵌套订阅来实现。这可以避免在您的示例中当推送新参数而来自
    templateService
    的请求仍处于待处理状态时可能发生的竞争条件。对于嵌套的 Observables,待处理的请求将继续,并且响应将被处理,而对于
    switchMap()
    ,待处理的请求将被忽略(甚至可能被取消)。

您可以在

RxJS 文档
中阅读有关 switchMap() 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.