У меня есть Http Interceptor (Angular 7), который ловит ошибки. Можно ли поймать ошибку и, основываясь на каком-то условии, вернуть успех вместо ошибки? Мой текущий код.
export class RequestInterceptor implements HttpInterceptor {
constructor() {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
catchError( response => {
if (someCondition) {
//return something that won't throw an error
}
return of(response)
})
)
}
}
Вы получили ответ на этот вопрос, который сработал?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно вернуть объект Observable<HttpEvent<any>>. Вы можете добиться этого, сделав еще один запрос, используя next.handle(newReq).
Например, если вы хотите добавить заголовок авторизации Bearer, если ошибка 401, вы можете сделать так:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
catchError( response => {
if (response.status === 401) {
return next.handle(request.clone({
setHeaders: { "Authorization": `Bearer ${token}` }
}));
}
return throwError(response);
})
)
}
но скажем, нам нужно вызвать API, чтобы получить этот новый токен, как нам это сделать внутри catchError?
Возможный дубликат Отлов ошибок в Angular HttpClient