【发布时间】:2020-11-16 08:20:33
【问题描述】:
我正在尝试发出 2 个 HTTP 请求,在第一次调用中我尝试创建一条记录,然后根据其结果(来自 API 方法的响应)我想执行或省略第二次调用来更新另一个数据。但是,虽然我可以在catchError 块中捕获错误,但我无法在第一次调用的 switchMap 方法中得到响应。那么,根据给定的场景,这个实现有什么问题呢?以及如何获得第一个结果的响应并根据第一个响应继续或不继续第二个调用?
let result;
let statusCode;
this.demoService.create(...).pipe(
catchError((err: any) => { ... }),
switchMap(response => {
// I am trying to get the response of first request at here
statusCode = response.statusCode;
if(...){
return this.demoService.update(...).pipe(
catchError((err: any) => { ... }),
map(response => {
return {
result: response
}
}
)
)}
}
))
.subscribe(result => console.log(result));
【问题讨论】:
-
您能否尝试在 catchError 之前在您的管道上添加“tap(console.log)”,以确认服务的创建是否返回数据以及是否记录任何内容? tap 在 rxjs/operators 下导入
-
你所说的“我无法在
switchMap”中得到回复是什么意思?您无法读取statusCode属性吗?它会抛出任何错误吗?您确定该属性在响应中可用吗?请详细说明。 -
@MichaelD 我想要做的是获取第一个调用(创建)的响应并根据其结果,执行第二个调用(更新)或中断(如果有错误我认为
switchMap不执行其他人,但如果没有错误,我可能想根据响应值中断)。当然我还需要得到第二次调用的响应。 -
@PragDopravy:你现在到底有什么不能做的?
-
@KShewengger 我试过
tap(response => { console.log(response); debugger; }),,但代码没有打到那里并打到switchMap块(之后它仍然没有打到tap()块)。那么,我的用法有什么错误吗?
标签: javascript angular typescript rxjs switchmap