我是一个简单的应用程序,根据城市列表,每隔X秒从服务中检索一些天气信息,然后显示信息。
我正在使用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的动作时,我创建一个observable列表,每个城市对应一个我想要获取数据,然后我使用merge将它们全部组合起来,我使用switchMap来替换新的流的初始可观察流。
一切都很好,但是如果我的城市列表而不是简单的数组是另一个可观察的呢?我该怎么做?
谢谢!
答案 0 :(得分:0)
然后您只需.switchMap
Observable,然后在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));