【问题标题】:Angular2 rxjs switchMap with inner map subscribtion emitting multiple observables带有内部地图订阅的Angular2 rxjs switchMap发出多个可观察的
【发布时间】:2018-06-13 06:35:45
【问题描述】:

我有一个带有内部映射函数的 switch 映射,它返回多个 obersable,如下所示:

  this.fb
    .getUsersGroupsAsObservable(user.uid, 'contacts')
    .switchMap(groups => {
      return groups.map(group => this.fb.getJobsbyGroup(group.id));
    })
    .subscribe(res => {
      console.log(res); // emits Observable {_isScalar: false, source: Observable, operator: MapOperator}
      this.job$ = res;
    });
});

这会正确运行两次并返回两个 observable,如下所示:

Observable {_isScalar: false, source: Observable, operator: MapOperator}
Observable {_isScalar: false, source: Observable, operator: MapOperator}

有什么方法可以返回一个可观察的列表(考虑 AngularFireList),然后我可以用异步管道渲染它?

更新:@concat 帮助我得到了这个问题的答案(但由于答案被删除的原因),我更新了我的代码如下(它现在可以正常工作):

  this.fb
    .getUsersGroupsAsObservable(user.uid, 'contacts')
    .switchMap(groups =>
      combineLatest(groups.map(group => this.fb.getJobsbyGroup(group.id))),
    )
    .subscribe(res => {
      console.log(res);
      this.jobs = [].concat.apply([], res);
    });

【问题讨论】:

    标签: angular rxjs angularfire2


    【解决方案1】:

    @concat 帮助我解决了这个问题,我需要做的就是使用 combineLatest 它将我所有的数组组合成一个数组,然后我将该数组展平,可能有更简单的方法可以做到这一点但是嘿,它有效:

      this.fb
        .getUsersGroupsAsObservable(user.uid, 'contacts')
        .switchMap(groups =>
          combineLatest(groups.map(group => this.fb.getJobsbyGroup(group.id))),
        )
        .subscribe(res => {
          console.log(res);
          this.jobs = [].concat.apply([], res);
        });
    

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 1970-01-01
      • 2018-06-23
      • 2018-04-29
      • 2018-07-31
      • 1970-01-01
      • 2017-03-21
      • 2016-06-26
      • 1970-01-01
      相关资源
      最近更新 更多