Rxjs一个可观察给其它
问题描述:
我有一个相当笨重的面色一组代码,其中从一个可观察的数据被反馈到另一个,就像这样:Rxjs一个可观察给其它
let source = this.myService.getFoo()
.subscribe(result => {
let source2 = this.myService.getMoo(result)
.subscribe(result2 => { // do stuff });
});
我知道,有很多方法可以结合和链,但我需要将来自源的数据输入source2。订阅的嵌套看起来很糟糕,我很肯定有更好的方法来做到这一点。
谢谢!
答
为了将Observable发射的物体转换为另一个Observable,您可能需要使用flatMap运算符。它创建一个内部Observable并将其结果平铺到外部流中。
let source = this.myService.getFoo()
.flatMap(result => this.myService.getMoo(result))
.subscribe(result2 => { // do stuff });
这里有一些屋经营者可以使用不同的表现:
- flatMap/mergeMap - 创建立即对任何源项目可观察到的,所有以前的观测值都保持活力
- concatMap - 等待先前的内部Observable在创建下一个之前完成
- sw itchMap - 对任何来源的项目,完成了以往内观察到的,将立即创建下一个
- exhaustMap - 而此前内可观察到未完成
答
您可以使用merge
“合并”两个流,以便从任何两个观测量的任何发射被送到了观察员:
let source = this.myService.getFoo()
.merge(this.myService.getMoo(result))
.subscribe(...);
...或者,如果你想订阅的第二个可见的,仅仅后的第一个发出的价值,你可以使用mergeMapTo
:
let source = this.myService.getFoo()
.mergeMapTo(this.myService.getMoo(result))
.subscribe(...);
你可以做concatMap
类似的事情,这将等到内可观测compeletes。
但是,它确实取决于您想要实现的目标以及您希望在观察者中获得的目标。
感谢您的信息源项目将被忽略。这就是诀窍! –