Angular2 rxjs switchMap,内部地图订阅发出多个可观察对象

时间:2018-06-13 06:35:46

标签: angular rxjs angularfire2

我有一个带有内部地图功能的开关地图,它返回多个obersables,如:

  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}

有没有办法返回一个observable列表(思考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);
    });

1 个答案:

答案 0 :(得分:0)

@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);
    });