У меня есть базовый HttpInterceptor, в котором я использую rxjs retryWhen, чтобы повторить попытку определенное количество раз в случае сбоя службы. Если вызов службы достиг максимального количества повторных попыток, я хотел бы вернуть это методу, который первоначально инициировал вызов службы.
Мой вопрос в том, как я могу вернуть управление обратно первоначальному инициатору http-вызова? Мне нужно сделать это, чтобы централизовать контроль над обработкой повторных попыток в одном месте (перехватчик), и я хотел бы иметь возможность обратного вызова метода успеха/неудачи в вызывающей функции.
Моя проблема в том, что ошибка проглатывается глобальным обработчиком ошибок, и ничего не возвращается моему вызывающему.
Пример:
this.MyServiceCall()
.pipe(
map((result) => {
console.log('this is called when the service returns success');
}),
)
// If there is an error, then how can I show it?
})
}
export class HttpRetryInterceptorService implements HttpInterceptor {
constructor() { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).pipe(
retryWhen(errors => errors
.pipe(
concatMap((err:HttpErrorResponse, count) => iif(
() => (count < 3),
of(err).pipe(
map(()=>{
console.log(count.toString())
}),
delay((2 + Math.random()) ** count * 200)),
throwError(err)
))
))
);
}
}