Rxjs One Observable进入另一个

Sie*_*gel 14 observable rxjs

我有一个相当笨重的代码集,其中来自一个observable的数据被输入另一个,如:

let source = this.myService.getFoo()
   .subscribe(result => {
      let source2 = this.myService.getMoo(result)
         .subscribe(result2 => { // do stuff });
   });
Run Code Online (Sandbox Code Playgroud)

我知道有很多方法可以组合和链接,但是我需要将来自源的数据输入source2.订阅的嵌套看起来很糟糕,我很确定有更好的方法来做到这一点.

谢谢!

Zah*_*hiC 18

要将Observable发出的项转换为另一个Observable,您可能希望使用flatMap运算符.它创建一个内部Observable并将其结果平移到外部流.

let source = this.myService.getFoo()
    .flatMap(result => this.myService.getMoo(result))
    .subscribe(result2 => { // do stuff });
Run Code Online (Sandbox Code Playgroud)

以下是一些可以使用的平面运算符:

  • flatMap/mergeMap - 立即为任何源项创建一个Observable,所有以前的Observable都保持活动状态
  • concatMap - 在创建下一个Observable之前等待之前的Observable完成
  • switchMap - 对于任何源项,完成前一个Observable并立即创建下一个
  • exhaustMap - 在前一个Observable未完成时忽略源项