javascript - Rxjs 一个 Observable 馈入另一个

标签 javascript rxjs observable

我有一组看起来相当笨重的代码,其中来自一个可观察对象的数据被馈送到另一个,如下所示:

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

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

谢谢!

最佳答案

要将 Observable 发出的项目转换为另一个 Observable,您可能需要使用 flatMap 运算符。它创建了一个内部 Observable 并将其结果扁平化到外部流。

const source = this.myService
    .getFoo()
    .pipe(
        flatMap(result => this.myService.getMoo(result))
     )
    .subscribe(result2 => {
        // do some stuff
    });
以下是一些您可以使用的平面运算符,它们的行为不同:
  • flatMap/mergeMap - 立即为任何源项目创建一个 Observable,所有以前的 Observable 都保持事件状态
  • 连接 map - 等待前一个 Observable 完成后再创建下一个
  • 切换 map - 对于任何源项,完成前一个 Observable 并立即创建下一个
  • 排气 map - 映射到内部 observable,忽略其他值直到 observable 完成
  • 关于javascript - Rxjs 一个 Observable 馈入另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593900/

    相关文章:

    api - Angular2 - 多个依赖顺序 http api 调用

    javascript - bootstrap 3 远程模式似乎什么也不做

    javascript - ngrx 使用调度时从列表中删除项目

    Rxjs 结合 bufferCount 和 bufferTime

    javascript - 使对象可观察

    angular - 如果我们不订阅以 Angular 返回可观察对象的 HttpClient 请求,会发生什么

    javascript - Onclick JavaScript 不检查特定的 div 是否包含 HTML

    javascript - 在 Jasmine 中捕获错误

    javascript - 如何在 Node.js 快速路由中拦截 send() 或 render()

    javascript - 在运行时更改可观察的来源(rxjs)