У меня есть Angular перехватчик HTTP. Приложение использует таймер Rx JS для отправки запросов (короткий опрос). Каждые 5 секунд он отправляет около 10 запросов. Я хочу использовать перехватчик для обработки 502-504 кодов состояния. Я знаю, как отлавливать ошибки, но проблема в опросе.
Как только я отправляю 10 запросов, я получаю 10 ошибок почти одновременно. Я хотел бы distinctUntilChanged()
или хотя бы take(1)
как-то, но обе вещи не работают вместе с catchError()
.
export class ErrorInterceptor implements HttpInterceptor {
constructor(private readonly store: Store<AppState>) { }
intercept(request: HttpRequest<string>, next: HttpHandler): Observable<HttpEvent<string>> {
const errorCodes = [502, 503, 504];
return next.handle(request).pipe(
// take(1),
// distinctUntilChanged(), // both lines not working, because error is thrown earlier
catchError(err => {
if (errorCodes.includes(err.status)) this.store.dispatch(connectionLost());
return throwError(err);
})
);
}
}
Я знаю, что могу отправить новое действие об ошибке и использовать distinctUntilChanged
по своему действию. Но я получу это действие 10 раз в Redux DevTools. Я бы хотел этого избежать.
Есть идеи?