0

id路由参数中得到一个,并且我正在传递给我的 API 调用。为此,我目前正在使用嵌套订阅。但是我想使用RxJsconcat()的或者其他一些操作符(我不知道是哪个),这样我就可以避免嵌套。由于这里的文档没有给出一些例子,这让我很困惑,我如何在我的代码中使用它。

下面是实现嵌套的代码,我想使用concat()RxJs 或其他一些运算符来实现相同的逻辑。

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);
        }
      });
  }
});
4

1 回答 1

2

你真正想要的运营商是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);
        }
    });
于 2018-11-25T09:50:59.090 回答