Реализовать оператор RxJs вместо вложенных блоков подписки - PullRequest
0 голосов
/ 25 ноября 2018

Я получаю id из параметров маршрута и передаю его вызову API.Для этого я в настоящее время использую вложенную подписку 1005 *.Но я хочу использовать concat() или, возможно, какой-то другой оператор RxJs (я не знаю, какой), чтобы избежать вложенности.Поскольку документы здесь не дают какого-либо примера, который оставил меня в замешательстве относительно того, как я могу использовать его здесь в своем коде.

Ниже приведен код, в котором реализовано вложение, я хочу реализовать ту же логику, используя concat() или, возможно, какой-либо другой оператор RxJ.

this.route.params.subscribe((params: Params) => {
  this.selectedPostId = +params['id'];
  if (this.selectedPostId) {
    // Simple GraphQL API call below
    this.apollo.watchQuery(GetPost, {id: this.selectedPostId})
      .subscribe((post: PostType) => {
        if (post) {
          console.log(post);
        }
      });
  }
});

1 Ответ

0 голосов
/ 25 ноября 2018

Оператор, который вы действительно хотите, это flatMap

import { map, flatMap, filter } from 'rxjs/operators';

// ...


this.route.params.pipe(
        map((params: Params) => +params['id']), // Get the ID param
        filter((selectedPostId: any) => selectedPostId), // Remove any events without an ID
        flatMap(id => this.apollo.watchQuery(GetPost, {id: selectedPostId})) // Call the watchQuery function
    ).subscribe((post: PostType) => {
        if (post) {
          console.log(post);
        }
    });
...