首页 > 解决方案 > 以角度用 flatMap 完成

问题描述

我正在使用 Angular 5 和 rxjs。我正在拨打 2 次服务电话,其中一次取决于其他结果。我正在使用 flatMap 进行操作。在进行了两个 api 调用之后,我还想进行一些操作。我正在使用 finalize 。我的代码如下所示:

this.myservice.api1(param1).pipe(takeUntil(this.destroyed$), finalize(() => {
//do something after both api calls are completed
},
flatMap((result1) => {
    //do some operation and create object x(this.objx)
    return this.myservice.api2(param1);
})
).subscribe((result2) => {
    //do something based on result2 and this.objx
})

然而,finalize 块仅在第一次 API 调用后执行。使用一个 API 调用 finalize 正在执行,但使用 flatMap 它仅在第一次 API 调用后执行。如果我弄错了什么,请告诉我。

标签: angularrxjs

解决方案


我想这this.myservice.api1(param1)是正常的 http 请求,它只发出一次然后完成。

我建议switchMap用于此:

this.myservice
    .api1(param1)
    .pipe(
        takeUntil(this.destroyed$),
        switchMap((result1) => {
            //do some operation and create object x(this.objx)
            return this.myservice.api2(param1);
        }),
        finalize(() => {
            //do something after both api calls are completed
        },
    ).subscribe((result2) => {
        //do something based on result2 and this.objx
    })

当链完成或出错时将调用 Finalize。


推荐阅读