angular - 以角度用 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 调用后执行。如果我弄错了什么,请告诉我。
解决方案
我想这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。
推荐阅读
- react-native - React Native:双击退出应用程序
- html - 很难解释,模仿这个链接栏悬停效果
- adal.js - ADAL、Angular 6 和保护 MVC API
- angular - Angular Material mat-tree 获取复选框值
- c# - 在 Windows 服务启动/自定义/UUID/data0/ 中,我的事件(如安装)的 data0 是什么?
- amazon-web-services - AWS CLI:无法连接到终端节点 URL:“https://sts.amazonaws.com/”
- javascript - 如何创建多个相同的同名容器,这些容器可以包含(并保留)不同的项目/数量
- hyperledger-fabric - Hyperledger Fabric - NodeJS SDK 查询链码
- asp.net-mvc - d3.json 不从 ASP.NET MVC 的 App_Data 文件夹加载文件
- python - python opencv先运行后乱序,这正常吗?