Как провести рефакторинг двойной подписки в Angular 6 - PullRequest
0 голосов
/ 04 декабря 2018

Как я могу иметь только 1 оператор подписки в следующем коде, используя rxjs:

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

Я относительно новичок в rxjs, надеюсь, это один из операторов карты?

1 Ответ

0 голосов
/ 04 декабря 2018

Просто используйте оператор 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" здесь, чтобы адаптировать ваше излучаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...