Руководство angular на самом деле неправильно / сбивает с толку, или, по крайней мере, они не показали правильные примеры. Когда вы делаете что-то вроде этого:
catchError(this.handleError('addHero', hero))
handleError
должен принимать два параметра, а также возвращать функцию, которая принимает один параметр. Итак, что-то вроде этого:
handleError<T>(action: string, object: T): (e: HttpErrorResponse) => Observable<never> {
return (e: HttpErrorResponse) => {
if (error.error instanceof ErrorEvent) {
console.error('An error occurred:', error.error.message);
} else {
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
return throwError(
`Something bad happened while performing action: ${action}, on object ${object}`
);
};
}
Если вы хотите, чтобы handleError
был похож на тот, который у вас есть:
private handleError(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
console.error('An error occurred:', error.error.message);
} else {
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
return throwError(
'Something bad happened; please try again later.'
);
};
Вы должны изменить способ передачи этого в catchError
:
catchError((error: HttpErrorResponse) => this.handleError(error));
Если вы не обращаетесь к контексту this
из handleError
, вы можете сделать следующее:
catchError(this.handleError)
В этой части из руководство, это объясняется лучше. Просто в примерах в разделах POST и PUT отсутствует правильная реализация handleError
метода