【问题标题】:get stream of merged observables from another observable in rxjs从 rxjs 中的另一个可观察对象获取合并的可观察对象流
【发布时间】:2017-07-29 00:28:42
【问题描述】:

我有一个简单的应用程序,它基于城市列表,每隔 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 类型的动作时,我都会创建一个可观察对象列表,为每个我想要获取数据的城市创建一个列表,然后我使用合并将它们全部组合起来,我使用 switchMap 来将初始的可观察流替换为新的。

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

谢谢!

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多