可观察的 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 中
我正在尝试使用 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 中