TypeScript 3.1.6 Angular 7 Rxjs6 Использование catchError показывает ошибку в редакторе, но код работает правильно - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь вернуть пользовательскую ошибку из службы данных в случае возникновения ошибки.

public getRoles(): Observable<Array<Role> | CustomError> {

    return this.http.get(this.urlService.getRoles)
        .pipe(
            map((res: any) => {
                    let roles = new Array<Role>();
                    res.Result.forEach(item => {
                        roles.push(new Role().fromItem(item));
                    });

                    return roles;
                }
            ),
            catchError(err => {
                let customError = new CustomError();
                customError.errorNumber = err.status;
                customError.message = err.message;
                return throwError(customError);
            })
        );
}

Приведенный выше код выполняется точно так, как я ожидаю, но текстовый редактор отображает следующую ошибку:

(TS) Тип 'Наблюдаемый <{} |Role []> 'нельзя назначить типу' ObservableRole [] |CustomError> '.

Type' {} |Role [] 'нельзя назначить типу' Role [] |CustomError '.

Тип' {} 'нельзя назначить типу' Role [] |CustomError '.

Тип' {} 'нельзя назначить типу' CustomError '.

Свойство' errorNumber 'отсутствует в типе' {} '

Может кто-нибудь сказатьмне, что мне нужно сделать, чтобы решить проблему?

Оказывается, что это не единственное место в коде, где у меня возникла проблема с catchError.У меня есть простой перехватчик, который будет регистрировать ошибки http на консоли.(Я экспериментировал с тем, как использовать перехватчики).

public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.log(`ErrorInterceptor - ${req.url}`);

    return next.handle(req)
        .pipe(catchError(err => {
            console.log(err);
            return throwError(err);
        }));
}

С этим блоком кода я получаю очень похожий набор сообщений.Я правильно использую catchError и throwError?

1 Ответ

0 голосов
/ 07 марта 2019

Может быть, вам нужно импортировать класс throwError?:

import {Observable, throwError} from 'rxjs';
...