Вы можете попробовать объединить карту и проверить, является ли ошибка ошибкой, которую вы хотите повторить, в этом случае я использую 404, и если это так, вы устанавливаете таймер rxjs до обработки следующего запроса и, наконец, после использованияОператор берет, чтобы установить, сколько раз повторить попытку подключения.Если ошибка не является ошибкой, которую вы хотите повторить, то просто повторно ее обработайте и обработайте, как будто ничего не произошло раньше.
import { Injectable } from '@angular/core';
import {
HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse
} from '@angular/common/http';
import {Observable, throwError, timer} from 'rxjs';
import {catchError, mergeMap, retryWhen, take} from 'rxjs/operators';
@Injectable()
export class EnsureHttpsInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
retryWhen(errors => {
return errors
.pipe(
mergeMap(error => error.status === 404 ? timer(5000) : throwError(error)),
take(2)
);
}),
catchError((error: HttpErrorResponse) => {
switch (error.status) {
case 401:
console.log('Error 401', error);
break;
case 404:
console.log('404', error);
break;
default:
return throwError(error);
}
})
);
}
}