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

Ran*_*s1r 0 rxjs angular

如何使用 rxjs 在以下代码中只有 1 个 subscribe 语句:

  this.authStore.jwtContainer$.subscribe(x =>
      this.userService.getUserById(x.userLoginId).subscribe(z => this.user = z));
Run Code Online (Sandbox Code Playgroud)

我对 rxjs 比较陌生,希望它是地图运营商之一?

Kev*_*CHT 5

只需使用 switchMap (或 mergeMap )运算符,如下所示

简单的方法

this.authStore.jwtContainer$.pipe(
    switchMap(x=>this.userService.getUserById(x.userLoginId))
.subscribe(z => this.user = z);
Run Code Online (Sandbox Code Playgroud)

更好的

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

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