2017-07-28 9 views
1

都市のリストに基づいて、X秒ごとにサービスから気象情報を取得して情報を表示するシンプルなアプリケーションがあります。rxjs内の別の観測値からマージされた観測値のストリームを取得

私はこれを達成するためにngrxでAngular 4を使用しています。私はそれを動作させていますが、より反応のあるものにいくつかのものをリファクタリングしたいと思います。

だから、これは私が変更したいコードの一部です:

@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のアクションが得られるたびに、データを取得したい都市ごとに1つのオブザーバブルのリストを作成し、次にそれらをすべて結合するために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)); 
関連する問題