Хой о Повторить Оператор.Например:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
const authService = this.injector.get(UserTokenService);
return next.handle(this.addToken(req, authService.getToken())).pipe(
flatMap(
event =>
{
if (event instanceof HttpResponse) {
return this.success200(req, next,event.body);
}
else {
return throwError('Failed');
}
}
),
retry(1) // if you want to invoke 'next.handle' 1 additional time
);
}
Я не тестировал этот код, но это общая идея, пример можно посмотреть в приведенной ниже ссылке.
IЯ создал этот пример стекаблика, чтобы вы могли увидеть retry
в действии.
ОБНОВЛЕНИЕ:
Я провел дополнительное исследование и обнаружил, чтовсякий раз, когда при вызове http возникает ошибка 403 , вы автоматически вводите блок catch
.Я создал еще один пример stackblitz , в котором вы можете увидеть, что происходит с http запросами ответов 200 и 403 .Что касается вашего примера, вы также можете попробовать что-то вроде этого:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
const authService = this.injector.get(UserTokenService);
return next.handle(this.addToken(req, authService.getToken())).pipe(
flatMap(
event =>
{
if (event instanceof HttpResponse) {
return this.success200(req, next,event.body);
}
}
),
catchError(e => {
console.log('Failed attempt to login');
return throwError('Failed'); // retry logic should automatically kick in whenever _throwError_ occurs
}),
retry(1) // if you want 1 additional time
);
}