при респонсе с 502 или 503 ошибкой делает повтор запроса с задержкой delay = 5000ms
Но когда таких респонсов накапливается очень много, то и этих ретраев тоже становится очень много и тем самым они забивают поток, что другие запросы уже начинают висеть в статусе pending.
Можно ли как-то сделать, чтобы те запросы которые делают ретрай складывались бы в какую-нибудь очередь и выполнялись поочередно, чтобы не забивать поток для нормальных запросов?
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const delay = 5000;
return next.handle(req)
.pipe(
map((event: HttpEvent<any>) => {
return event;
}),
catchError((error: any) => {
if (error instanceof HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
} else {
if ([502, 503].includes(error.status)) {
return next.handle(req).pipe(
catchError(e => timer(delay).pipe(switchMapTo(observableThrowError(e)))),
retry(),
);
}
}
}
return observableThrowError(error);
})
);
}
С этим вопросом никто не силен помочь?) Уже голова взрывается)
Обсуждают сегодня