2017-07-28 106 views
1

我有一個簡單的應用程序,它基於城市列表每隔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替換新的可觀察流。

一切都好,但如果我的城市列表,而不是簡單的數組,是另一個可觀察的?我會怎麼做?

謝謝!

回答

0

然後你只需.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));