RxJS可观测嵌套订阅?

RxJS可观测嵌套订阅?,rxjs,observable,subscribe,Rxjs,Observable,Subscribe,简化如下代码示例的方法是什么? 我找不到合适的接线员。。谁能举个简单的例子 this.returnsObservable1(...) .subscribe( success => { this.returnsObservable2(...) .subscribe( success => { this.returnsObservable3(...) .subscrib

简化如下代码示例的方法是什么? 我找不到合适的接线员。。谁能举个简单的例子

this.returnsObservable1(...)
  .subscribe(

    success => {

      this.returnsObservable2(...)
        .subscribe(

          success => {

            this.returnsObservable3(...)
              .subscribe(

                success => {
                   ...
                },

如注释中所述,您正在寻找
flatMap
操作符

您可以在前面的答案中找到更多详细信息:

您的示例如下所示:

this.returnsObservable1(...)
  .flatMap(success => this.returnsObservable2(...))
  .flatMap(success => this.returnsObservable3(...))
  .subscribe(success => {(...)}); 

switchMap操作符也很有用。 与嵌套订阅相比,以下示例描述了switchMap的有用性:

  • 嵌套订阅的情况
  • 此代码笔提供了一个演示:

  • switchMap的情况
  • 此代码笔提供了一个演示:


    在之前回答RxJS 5时,我在使用RxJS 6的同时在这一页上结束了

    如果您也在6上(我认为您现在应该在6上),您可以使用
    flatmap
    作为内部
    管道

    修改了@user3743222的示例代码:

    this.returnsObservable1(...)
      .pipe(
        flatMap(success => this.returnsObservable2(...)),
        flatMap(success => this.returnsObservable3(...))
      )
      .subscribe(success => {(...)}); 
    

    您可能正在寻找
    flatMap
    switchMap
    操作符。示例不一定足够,但感谢您的分享。我发现的一个通用模式是将所有“subscribes”替换为返回下一个内部可观察对象的“switchMap”。然后将嵌套最多的“subscribe”钉在chain@RobinDijkhof所以在flatmap,
    .flatmap(success=>this.returnsAbservable2(…)
    中使用了一个返回observable的函数,然后
    this.returnsAbservable2(…)
    我不需要订阅它吗?如果
    returnsObjectable 2
    会返回一个可观察的数组,你能举个例子吗?
    Rx.Observable
      .interval(5000)
      .switchMap((val) => {
        console.log("outer:", val);
        return Rx.Observable.interval(1000).map((ival) => [val, ival]);
      })
      .subscribe((val) => {
        console.log("inner:", val[0], val[1]);
      });
    
    this.returnsObservable1(...)
      .pipe(
        flatMap(success => this.returnsObservable2(...)),
        flatMap(success => this.returnsObservable3(...))
      )
      .subscribe(success => {(...)});