Обработка ошибок Angular6 HttpClient в карте - PullRequest
1 голос
/ 10 июня 2019

Я использую Angular6 HTTPClient в своем сервисе и хотел бы сохранить следующий и ошибочный путь Наблюдаемого для подписчика.

Например, мой компонент выглядит примерно так:

private myFun(query: string) {

    this.myService.login(data).subscribe(next => {

        // Do successful stuff
        console.log('Got the data: ' + next);
    },
    err => {
       // Handle all errors here
       console.error('good luck next time')
    });
}

Мой сервис использует канал вместе с картой и catchError.

private findData(in: string): Observable<string> {

    return this.http.post<string>(self.url, '')
        .pipe(
            map( response => {
            //Check the data is valid
            if (this.dataValid(response)){
                     return this.convertedData(response);
            } else {
                throw new Error('failed parsing data');
            }
            }),
            catchError(this.handleError)
        );
  }

Я могу обнаружить проблему синтаксического анализа и вызвать ошибку с помощью catchError, но я пытаюсь понять, как обработать catchError.

Обработчик ошибок выглядит следующим образом:

private handleError(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {
        // Client Side Error
        console.error('Client side error:', error.error.message);
    } else if (error.message === 'failed parsing data') {
        // Client Side Processing Error
        console.error(error.message);
        return throwError(error.message);
    } else {
        // Service Side Error
        console.error(`Server returned code ${error.status}, ` + `body was: ${error.error}`);
    }

    // return an observable error message
    return throwError('failed to contact server');
}

Он выполняет свою работу, но я не могу удержаться от мысли, что должен быть лучший, более Angular / RxJS способ сделать это.

Что я ожидал, так это попадание на путь «error.error instanceof ErrorEvent» обработчика ошибок.Я не понимаю, как обновляется параметр «error: HttpErrorResponse» - я просто выбрасываю «новую ошибку (« ошибка при разборе данных »);».

Любые советы / предложения?

1 Ответ

1 голос
/ 10 июня 2019

Согласно вашему коду очевидно, что обратный вызов catchError может принимать тип HttpErrorResponse или Error.Поэтому catchError входной сигнал обратного вызова должен иметь тип any или Error | HttpErrorResponse, например:

private handleError(error: any // or it can be Error | HttpErrorResponse) {

    //now do console.log(error) and see what it logs
    //as per the output adjust your code

    if (error instanceof Error) {
        // Client Side Error
        console.error('Client side error:', error.error.message);
    } else if (error.message === 'failed parsing data') {
        // Client Side Processing Error
        console.error(error.message);
        return throwError(error.message);
    } else {
        // Service Side Error
        console.error(`Server returned code ${error.status}, ` + `body was: ${error.error}`);
    }

    // return an observable error message
    return throwError('failed to contact server');
}
...