从rxjs中的另一个observable获取合并的观测值流
问题描述:
我有一个简单的应用程序,它基于城市列表每隔X秒从服务中检索一些天气信息,然后显示信息。从rxjs中的另一个observable获取合并的观测值流
我正在使用Angular 4和ngrx来完成这个工作,但我希望将一些事情重构成更具响应性的东西。
所以这是一段代码,我想改变:
@Effect()
weather$: Observable<Action> = this.actions$
.ofType(LOAD_WEATHER_ACTION)
.switchMap(() => {
const cityObservables = this.cities.map(city =>
this.service.getWeatherByCityId(city.id, city.name)
);
return Observable.merge(...cityObservables);
})
.map(weather => new CityWeatherLoadedAction(weather));
所以这里的语法并不重要。这样做的是,每当我得到一个类型为LOAD_WEATHER_ACTION的动作时,我都会创建一个observables列表,每个城市都有一个我想获取数据的列表,然后使用merge将它们全部组合起来,然后使用switchMap替换新的可观察流。
一切都好,但如果我的城市列表,而不是简单的数组,是另一个可观察的?我会怎么做?
谢谢!
答
然后你只需.switchMap
可观察的,然后做你的merge()
内:
weather$: Observable<Action> = this.actions$
.ofType(LOAD_WEATHER_ACTION)
.switchMap(() => {
return this.cities.switchMap((cities) => {
return Observable.merge(...cities.map(city => this.service.getWeatherByCityId(city.id, city.name)))
})
})
.map(weather => new CityWeatherLoadedAction(weather));