具有内部地图订阅的 Angular2 rxjs switchMap 发出多个可观察值
Angular2 rxjs switchMap with inner map subscribtion emitting multiple observables
我有一个带有内部映射函数的开关映射,它是 returning 多个可观察对象,如下所示:
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;
});
});
这是 运行 两次正确 return 两个可观察值,如下所示:
Observable {_isScalar: false, source: Observable, operator: MapOperator}
Observable {_isScalar: false, source: Observable, operator: MapOperator}
有什么方法可以 return 可观察对象列表(考虑 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);
});
@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);
});
我有一个带有内部映射函数的开关映射,它是 returning 多个可观察对象,如下所示:
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;
});
});
这是 运行 两次正确 return 两个可观察值,如下所示:
Observable {_isScalar: false, source: Observable, operator: MapOperator}
Observable {_isScalar: false, source: Observable, operator: MapOperator}
有什么方法可以 return 可观察对象列表(考虑 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);
});
@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);
});