Я создал функцию, которая должна ловить ошибку:
private pipeError(): any {
return catchError((error: HttpErrorResponse, caught: Observable<any>):
HttpErrorResponse | any => {
if (error.status === 400 || error.status === 402) {
return Observable.throw(error);
} else if (error.status === 401) {
this.router.navigate(['/login']);
return Observable.throw(error);
}
});
}
Затем я создал функцию, которая должна отправлять запрос в api:
private post(path: string, data: Object, headers: HttpHeaders = this.getHeaders()): Observable<Object> {
return this.http.post(`${this.apiUrl}${path}`, data, { headers }).pipe(
this.pipeError(),
map((response: Object): Object | any => {
if (response instanceof Object) {
return response;
} else {
return empty();
}
})
);
}
И чтобы вызвать указанную выше функцию, я создаю новую функцию, в которой она передает соответствующие параметры:
userRegister(data: UserRegisterInterface): Observable<Object> {
return this.post('accounts/register/', data);
}
ДРУГОЙ КОМПОНЕНТ: А теперь в другом компоненте вы подписываетесь на эту функцию
this.createAccountSubscription = this.api.userRegister(datadata).subscribe((data) => {
console.info(data);
}, error => {
console.info(error);
});
Я хотел, чтобы моя функция pipeError вернулась к этой подписке на ошибку, но это не работает, она работает:

Вы не всегда справляетесь с ошибкой. Думаю, pipeError() можно было бы переписать вот так:
import { throwError } from 'rxjs';
private pipeError(): any {
return catchError((error: HttpErrorResponse, caught: Observable<any>):
HttpErrorResponse | any => {
if (error.status === 401) {
this.router.navigate(['/login']);
}
return throwError(error);
});
}
По-прежнему ошибка: TypeError: rxjs__WEBPACK_IMPORTED_MODULE_3__.Observable.throw is not function
Ваш
pipeErrorне всегда возвращает наблюдаемый