避免在RxJs 6中嵌套subcribe()调用

ult*_*tex 3 observable typescript angular rxjs6

有时,我需要以前可观察到的值,并运行另一个依赖于该值的函数,依此类推。它进行嵌套的subcribe()调用,然后代码非常难看且难以管理。我这里有一个例子:

getObservableData().subcribe(next=>
    let dialogRef=this.dialog.open(EvalListComponent, {data: next})
    dialogRef.afterClosed().subscribe(next=>{
        let k=dialogRef.componentInstance.getAnotherObservableData()
            .subcribe( next=> doSomthing(next))
}))
Run Code Online (Sandbox Code Playgroud)

什么样的解决方案可以遇到这种情况。我需要一些扁平的结构。我知道有一个管道函数,可以与rxjs运算符一起使用。但是如何实现呢?

Bal*_*ács 5

我推荐这篇文章:学习展平策略

TLDR:使用地图运营商,如:mergeMapswitchMapconcatMapexhaustMap

它们大多数都以相同的方式工作-

  1. 它们将一些值映射到可观察值(您是负责从它们返回可观察值的对象,他们只是将其映射)

  2. 他们展平了您返回的可观察物(他们只是订阅了它)

  3. 他们决定展平之前/之后该做什么(“平展策略”)

您只需决定哪种策略对您的示例有用。通过阅读该文章,您可以轻松弄清楚。