#angular #angular-httpclient #angular-http-interceptors
#angular #angular-httpclient #angular-http-interceptors
Вопрос:
Я нахожусь на Angular 10 (раньше я был на 8 с той же проблемой). В следующем методе я подписываюсь на HTTP-запрос в моем компоненте:
this.httpData.updateRadioAnswers(questions)
.subscribe(
result => this.requestResult = <any>result,
error => {
this.requestError = <any>error;
console.log('error! ' this.requestError);
},
() => {
console.log(this.requestResult);
});
И у меня также есть этот HTTP-перехватчик:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.oauth.token amp;amp; !req.headers.has('Authorization')) {
req = req.clone(this.getHttpHeaders(null));
return next.handle(req).pipe(
tap((event: HttpEvent<any>) => { }, err => {
if (err instanceof HttpErrorResponse) {
console.log(err);
}
})
);
} else {
return next.handle(req);
}
}
Когда мой HTTP-запрос не выполняется успешно, я хотел бы обработать ошибку в моем компоненте (первый блок), но код внутри «error» никогда не выполняется. Однако код для «err» в перехватчике будет выполнен при возникновении ошибки. Как я могу правильно выполнить некоторый блок кода в моем компоненте, когда HTTP-запрос выдает ошибку? Я не хочу обрабатывать это в перехватчике, поскольку я хочу настроить сообщения об ошибках для разных запросов, а не для того, чтобы они были одинаковыми от перехватчика.
Ответ №1:
Попробуйте это:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (this.oauth.token amp;amp; !req.headers.has('Authorization')) {
req = req.clone(this.getHttpHeaders(null));
return next.handle(req).pipe(
catchError(error => throwError(error))
)
} else {
return next.handle(req);
}
}
Комментарии:
1. Я пробовал это, но он по-прежнему не выполняет код в части ошибки моей подписки в компоненте