可观察的 switchMap 过滤器 toArray

Observable switchMap filter toArray

我正在尝试使用 switchMap & filter 过滤剧集:

this.getEpisodesForStoryEvents()
    .switchMap(episodes => Observable.from(episodes))
    .filter((episode: Episode) => {
        return episode.ref.startsWith('SE/8');
    })
    .toArray()
    .subscribe(episodes => {
        console.log(episodes);
    });

但是当使用toArray时,它不再起作用了,我没有订阅任何东西:/

你的问题是 valueChanges 是一个事件发射器。我假设每次集合更改时它都会发出一个事件。总是可以有更多的变化,所以 valueChanges 从不调用 complete,而 toArray 永远等待。

您不能在此处使用 toArray。必须订阅 observable 并处理每个条目。或者您可以使用 reduce 并自己将项目添加到数组中。对于推入源可观察对象的每个新值,只会调用 reduce,因此您会随着通过过滤器的每个更改得到更新

也许这是一个迟到的答案:)
但问题的简单解决方案可以是:

this.getEpisodesForStoryEvents()
      .switchMap(episodes => {
        return Observable.from(episodes))
      .filter((episode: Episode) => {
        return episode.ref.startsWith('SE/8');
      })
      .toArray()
       }
  .subscribe(episodes => {
      console.log(episodes);
    });

所以我只是将过滤器和 toArray 封装在 switchMap 中