【问题标题】:finalize with flatMap in angular以角度用 flatMap 完成
【发布时间】:2019-02-07 16:11:58
【问题描述】:

我正在使用 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 调用后才执行。如果我弄错了什么,请告诉我。

【问题讨论】:

  • finalize 将在 this.myservice.api2(param1) 之前调用,仅当 this.myservice.api1(param1) 错误或 this.destroyed$ 发出时。

标签: angular rxjs


【解决方案1】:

我想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 将在链完成或出错时调用。

【讨论】:

  • 在我将 finalize 函数放在 flatMap 函数之后它工作了。谢谢!
猜你喜欢
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 2021-02-05
  • 2017-11-29
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
相关资源
最近更新 更多