从rxjs中的另一个observable获取合并的观测值流

从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));