Отправка ошибки в подписку RXJS

Я создал функцию, которая должна ловить ошибку:

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 не всегда возвращает наблюдаемый

martin 30.08.2018 12:45
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
1
1
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не всегда справляетесь с ошибкой. Думаю, 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

Wojtar 30.08.2018 13:09

Другие вопросы по теме