从内嵌套的回调函数返回可观测(Return Observable from inside neste

2019-09-26 06:19发布

下午好!

我目前正在开发中Angular2 / 4的web应用程序和我有观测量的一个问题。 我们的目标是,一个组件内,调用一个函数,当该功能完成后,我想执行一些代码。 因此,在“myComp.component.ts”文件中的代码是:

this.myService.myFunc1().subscribe(() => {
    // this code has to be executed after myFunc1() finishes.
});

问题是“myService.service.ts”文件“myFunc1()”函数内。 这个函数的结构如下:

  1. 定义该函数,它返回一个Observable<Status> ,其中状态对象就是{ status: 'ok' }
  2. 从另一个调用服务,它返回一个可观测的功能“myfunc2所()”,并做了一些工作人员。
  3. 从另一个调用服务,它返回一个可观察并具有后“myfunc2所()”结束要执行的功能“myFunc3()”。
  4. 从另一个调用服务,它返回一个可观察并具有后“myFunc3()”结束要执行的功能“myFunc4()”。
  5. 返回{ status: 'ok' }进入“myComp.component.ts”,以便在其他代码的订阅()时要执行的内部。

所以,我需要的是(3)的一些功能嵌套调用,以一前一后地执行他们的每一个。 最简单的方法是下面给出:

myFunc1(): Observable<Status> {
    // some code and then call of myFunc2()
    this.myService2.myFunc2().subscribe(data => {
       // do some staff here and then call of myFunc3()
       this.myService3.myFunc3().subscribe(data2 => {
          // do some other staff and then call of myFunc4()
          this.myService4.myFunc4().subscribe(data3 => {
             // do staff and then return program flow into the Component
             return Observable.of<Status>({status: 'ok'});
          });
       });
    });
}

但当然return Observable.of<Status>({status: 'ok'}); 不工作。 我一直在寻找在互联网和其他#1问题的解决方案,我发现像使用flatMap(),mergeMap(),switchMap()等的建议,我认为这些解决方案无法在我的情况下使用,因为每个功能都有在另一个之后被执行。

我能做什么? 我怀念的是什么? 预先感谢您的帮助和您的时间!

Answer 1:

你正在寻找的是switchMap或mergeMap。 开关的地图是更好的,如果新的出来,将取消之前的请求。

myFunc1(): Observable<Status> {
    // some code and then call of myFunc2()
    return this.myService2.myFunc2()
      .switchMap(data => {
       // do some staff here and then call of myFunc3()
       return this.myService3.myFunc3()
      }).switchMap(data2 => {
          // do some other staff and then call of myFunc4()
          return this.myService4.myFunc4()
      }).switchMap(data3 => {
             // do staff and then return program flow into the Component
             return Observable.of<Status>({status: 'ok'});
          });
       });
    });
}


文章来源: Return Observable from inside nested callbacks functions