angular - 为什么 Angular 错误句柄不会从服务中抛出错误
问题描述
当我对 api 的服务调用出现任何问题时,我已经实现了一种处理错误的方法。在代码中,我将对错误处理程序的引用传递给 Rxjs catchError 运算符,如下所示:
GetUserByUserID(id: number): Observable<UserDetails> {
const url = `${this.baseUrl}/${this.userByID}/${id}`;
return this.http.get<UserDetails>(url, this.httpOptions)
.pipe(
catchError(this.handleError)
);
}
错误处理程序:
import { Observable, throwError as observableThrowError } from 'rxjs';
private handleError(error: HttpErrorResponse) {
console.log(error);
if (error.status === 400) {
return observableThrowError(new BadRequestError(error.error));
}
if (error.status === 404) {
return observableThrowError(new NotFoundError());
}
if (error.status === 401) {
return observableThrowError(new UnAuthorizedError(error));
}
if (error.status === 403) {
return observableThrowError(new ForbiddenError(error));
}
return observableThrowError(new AppError(error));
}
在此错误处理程序方法中,我返回一个包含特定于我的应用程序域(错误域)的错误的 Observable,我创建了不同的错误类,所以当我检查错误是否是我的错误域类之一的实例时订阅 Observable。
this.router.data
.subscribe(response => {
this.UserDetail = response.userDetail;
console.log(this.UserDetail);
}, (error: AppError) => {
if (error instanceof BadRequestError) {
this.notifierService.notify('error', 'lease Register to login');
} else {
this.notifierService.notify('error', 'Something went worng... Please try again in few minutes');
}
}
});
将所有这些都准备好来处理错误,即返回一个特定于我的应用程序的错误的 Observable,最后检查它是我的错误域之一的实例,当订阅实际上似乎不起作用时,我不断收到这个错误控制台:
解决方案
推荐阅读
- raspberry-pi - 更改 Watson IoT 输入节点连接为网关时,Raspberry Pi 上的 Node-RED 不断重启
- r - 将结果作为向量 (r) 存储在 for 循环中
- reactjs - 如何在 React Native 中包装 Flatlist 项目
- r - 在面板数据帧 R 中生成一个虚拟对象
- elasticsearch - 在前端搜索操作时获取数据计数
- mysql - 如何删除 MySQL Query 中未使用的重新编码的行
- flask - Flask Admin:将相关对象的属性添加到模型视图中的列列表
- regex - 逗号分隔列表的正则表达式
- sql - 使用 vb.net 在 sql db 中调用列的最大值
- php - PHP OCI:连接字符串(从 JDBC 转换)