Я использую Angular 6.
И в этом конкретном случае использования вы хотите обработать 404, а скорее передать его компоненту для отображения текстового сообщения в пользовательском интерфейсе.
// code in service
public getVariatioMarginPlugDates(): Observable<Date[]> {
return this._http
.get<Date[]>(AppSettings.VariationMarginPlugDatesUrl, { withCredentials: true })
.pipe(catchError(this._trace.handleError('GET ' + AppSettings.VariationMarginPlugDatesUrl, [])));
}
404
также обрабатывается catchError
, который использует утилиту обработки ошибок. Однако я хочу перехватить 404 и потенциально установить некоторую логическую переменную, которую компонент мог бы использовать для отображения полезного сообщения о состоянии в пользовательском интерфейсе (не ища 404
перенаправление или универсальное всплывающее окно)
Большое спасибо!
// edited code with solution
public getVariatioMarginEmail(runDate: string): Observable<any> {
const url = AppSettings.VariationMarginEmailUrl.replace(this._regExp, runDate);
return this._http
.get<any>(url, { withCredentials: true })
.catch(this._trace.handleError('GET ' + url, []));
}
public handleError<T>(operation = 'operation', result?: T, skipStatus = [404]) {
return (error: any): Observable<T> => {
if (skipStatus.includes(error.status)) {
return observableOf(error.status as T);
}
const errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg);
const dialog = this._dialogService.open({
title: 'Server Error',
content: `${operation} failed: ${errMsg}`,
actions: [ { text: 'Ok' } ]
});
try { this._loggingService.log(errMsg); } catch (error) {}
return observableOf(result as T); // return empty result
};
}