【发布时间】:2023-03-28 20:23:01
【问题描述】:
我有一个调用服务方法myService.createResource() 的方法。当它失败时,我将isResourceCreatingFailed 设置为true。
doSomething(): void {
this.myService
.createResource()
.pipe(
finalize(() => {
this.isLoading = false;
})
)
.subscribe(
() => {
// ... some event emits
},
(error) => {
this.isResourceCreatingFailed = true;
}
);
}
myService 中的createResource 方法如下所示:
createResource(body) {
return this.http.post(url, body).pipe(
switchMap((response) => {
return this.pollUntilResourceCreated(response.id).pipe(
timeout(8000),
catchError((error) => throwError(error))
);
})
);
}
首先它发出一个 HTTP 调用来创建一个资源。在最坏的情况下,它可能需要长达 10 秒,如果失败,我需要再次调用 myService.deleteResourse().subscribe(),但也会抛出一个错误,以便在我的第一个代码示例中将 isResourceCreatingFailed 设置为 true。我添加了catchError((error) => throwError(error)),它返回一个错误,但最好的位置是myService.delete()?
myService.deleteResourse() 将始终从createResourse 调用,这就是我想保留它的原因。
【问题讨论】:
-
所以你想用同样的请求再调用同样的 API 1 次?
-
嗨!不,我想做
myService .createResource(),但如果它失败了我想做deleteResource()
标签: javascript angular typescript rxjs