当出现 502 bad gateway 错误时,我需要重试特定的 API 调用大约 3 次。重试可能会稍微增加延迟。这是组件中的代码。
一些.component.ts
someMethod() {
let attempt = 0;
this.someService.AppendSubject(this.subject)
.pipe(retryWhen(errors => errors.pipe(
tap(error => this.retryApi(error, ++attempt, 'Server busy. Retrying request', this.subject))
)))
.subscribe(response => {
//do something with response
});
}
retryApi(error: any, attempt: number, retryMessage: string, data?: any) {
delay(this.duration*attempt)
//show toast with retryMessage
if (attempt > this.retryLimit) {
//show some message
if (data)
this.notifyFailure(data);
throw error;
}
}
notifyFailure(data: any) {
this.someService.notifyFailure(data);
}
一些.service.ts
public AppendSubject(data: any) {
return this.http.post<any>(`{env.api}/appendsubject/`, data);
}
public notifyFailure(data: any) {
return this.http.post<any>(`{env.api}/notifyfailure/`, data);
}
- 在服务器端根本没有命中 notifyFailure 端点。
这是由于我在重试中如何做/不做错误捕获吗?如何正确捕获上述代码中的错误并且不阻碍或终止进一步的 notifyFailure 调用?
注意:我目前没有在拦截器中执行此操作,因为此时这仅适用于特定 API。我在组件中编写重试处理程序,而不是在some.service.ts
级别,因为我不知道如何做到这一点,同时在组件中显示适当的 toast 和弹出窗口。