我想将三个可观察对象合并为一个流。然而,第三个observable需要来自第一个observable的属性 - 是否可以将所有三个结合起来以避免嵌套订阅(为了清楚起见)?
Observable.combineLatest(this.fooService.model, this.barService.model)
.subscribe(result => {
//do work
this.bazService.anotherObservable(result[0].someProperty)
.subscribe(anotherResult => {
//do more work
});
});
答案 0 :(得分:4)
Observable
.combineLatest(this.fooService.model, this.barService.model)
.switchMap(([foo, bar]) => {
return bazService
.anotherObservable(foo.someProperty)
.map((baz) => [foo, bar, baz]);
})
.subscribe(([foo, bar, baz]) => console.log(foo, bar, baz));
每当合并的foo
和bar
可观察量值发出一个值时,baz
服务将被调用,其结果将进一步合并。
请注意,如果switchMap
或baz
观察点重新发出,foo
将放弃待处理bar
次调用。如果您不想要这种行为并且始终希望发出baz
结果,请使用concatMap
代替switchMap
。
另一种选择是使用mergeMap
代替concatMap
- 后者将保证baz
来电的顺序将被保留,而前者则不会。