TypeScript 3.1.6 Angular 7 Rxjs6使用catchError在编辑器中显示错误但代码运行正常

问题描述 投票:1回答:1

我试图在发生错误时从数据服务返回自定义错误。

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)输入'Observable <{} | Role []>'不能赋值为'ObservableRole [] | CustomError>”。

输入“{} |角色[]'不能分配给'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吗?

angular angular7 rxjs6 typescript3.0
1个回答
0
投票

我的是,你需要导入throwError类吗? :

import {Observable, throwError} from 'rxjs';
© www.soinside.com 2019 - 2024. All rights reserved.