Ловля и обработка ошибок бэкэнда в Angular - PullRequest
0 голосов
/ 23 декабря 2018

Я прочитал несколько других подобных вопросов, но информация, которая там была, не помогла мне найти ответ на мою проблему.У меня проблемы с попыткой передать ошибки, которые мне удается поймать внутри сервисов, компонентам.Так что это мой метод onSubmit внутри компонента, который регистрирует пользователя:

    onSubmit({ value, valid }) {
      console.log(value, valid);
      if (valid) {
      this.userService.trySaveUser({ email: value.email, password: value.password.pass }).subscribe(
        (user) => {
          console.log('saved user ' + user.email);
        }),
        (error) => {
          console.log('inside error');
        };
      }
    }

Он работает так, как должен, когда все верно на стороне сервера.Но в случае ошибки я не могу поймать это здесь.Однако он перехватывается в сервисе:

trySaveUser(body: User): Observable<any> {
    return this.http.post<any>(this.pathAPI + '/user', JSON.stringify(body), super.header()).pipe(
      catchError(super.handleError));
}

Внутри метода super.HandleError Я извлекаю данные из ошибки и могу без проблем распечатать их в консоли.Этот метод выглядит следующим образом:

    public handleError(error: HttpErrorResponse | any) {
        //...fetching data from the error to errMsg

        //console.error(errMsg);
        return throwError(errMsg);
    }

Мне кажется, я не совсем знаю, как он работает, так как я ожидаю, что ошибка, возвращенная описанным выше методом, будет снова обнаружена в компоненте:

(error) => {
  console.log('inside error');
};

... но этого не происходит.Почему так и как я могу это исправить?Мне нужно иметь его в компоненте, чтобы я мог отобразить сообщение об ошибке для пользователя.Буду благодарен за любую помощь!

1 Ответ

0 голосов
/ 23 декабря 2018

Вы фактически закрываете блок подписки после success обратного вызова.Снимите дополнительный кронштейн ( оттуда, чтобы заключить error обратный вызов в subscribe.

this.userService.trySaveUser({ email: value.email, password: value.password.pass }).subscribe(
        (user) => {
          console.log('saved user ' + user.email);
        }, // remove extra bracket here
        (error) => {
          console.log('inside error');
        };
 )}  // add that bracket in this line
...