如何在Angular 6中重构双重订阅

时间:2018-12-03 23:37:19

标签: angular rxjs

在使用rxjs的以下代码中,如何只有1个订阅语句:

  this.authStore.jwtContainer$.subscribe(x =>
      this.userService.getUserById(x.userLoginId).subscribe(z => this.user = z));

我对rxjs比较陌生,希望它是地图操作员之一?

1 个答案:

答案 0 :(得分:3)

只需使用如下的switchMap(或mergeMap)运算符

简单方法

this.authStore.jwtContainer$.pipe(
    switchMap(x=>this.userService.getUserById(x.userLoginId))
.subscribe(z => this.user = z);

更好

this.authStore.jwtContainer$.pipe(
    map(x=>x.userLoginId),
    switchMap(loginId=>this.userService.getUserById))
.subscribe(z => this.user = z);

switchMap和mergeMap可以将结果从可观察的传递到另一个,简单的“ map”运算符可用于调整您的发射值。