Rxjs一个可观察给其它

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 - 而此前内可观察到未完成
+0

感谢您的信息源项目将被忽略。这就是诀窍! –

您可以使用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。

但是,它确实取决于您想要实现的目标以及您希望在观察者中获得的目标。