我想将三个 observable 合并到一个流中。然而,第三个 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
});
});
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
每当组合foo和barobservable 发出一个值时,baz服务将被调用,其结果将被进一步组合。
请注意,如果或observables 重新发出,switchMap将放弃挂起的baz调用。如果您不希望出现这种行为并且总是希望发出结果,请使用代替。foobarbazconcatMapswitchMap
另一种选择是使用mergeMap而不是concatMap- 后者将保证baz保留调用顺序,前者不会。
| 归档时间: |
|
| 查看次数: |
1810 次 |
| 最近记录: |