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

时间:2017-07-28 15:51:43

标签: angular rxjs

我是一个简单的应用程序,根据城市列表,每隔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来替换新的流的初始可观察流。

一切都很好,但是如果我的城市列表而不是简单的数组是另一个可观察的呢?我该怎么做?

谢谢!

1 个答案:

答案 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));