Проходя учебник по Angular и конвертируя его в свои цели, я решил, что хочу объединить 2 варианта метода обработчика ошибок, показанные в одном, потому что мне нравится функция обоих.
Это все в одной службе, и это 2 метода из учебника:
private handleError1(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
console.error('An error occurred', error.error.message);
} else {
console.error(`Backend error code ${error.status}`,
`body: ${error.error}`);
}
return throwError('Something bad happened');
}
, который вызывается так, где Group
- мой класс с сервера REST:
getGroups(): Observable<Group[]> {
return this.httpClient.get<Group[]>(`${this.restUrl}/group`).pipe(
tap(_ => this.log(`fetched groups`)),
catchError(this.handleError1)
);
}
, а затем, альтернативно, есть:
private handleError2<T>(operation = 'operation', result?: T) {
return (error: any): Observable<T> => {
console.error(`${operation} failed!`, error);
return of(result as T);
}
}
, который называется так:
getGroups(): Observable<Group[]> {
return this.httpClient.get<Group[]>(`${this.restUrl}/group`).pipe(
tap(_ => this.log(`fetched groups`)),
catchError(this.handleError2<Group[]>('getGroups', []))
);
}
Итак, я наивно собрал свой обработчик ошибок комбинации:
private handleError<T>(error: HttpErrorResponse,
operation = 'operation', result?: T) {
....
, но у меня проблемы, потому что я не могу понять, как его параметризировать в catchError()
.Что HttpErrorResponse
явно подразумевается как-то, когда это единственный параметр, но как?