angular - 当 httpClient 失败时,它会在错误回调中返回一个可观察到的错误,而不是一个错误对象
问题描述
使用 Angular 6 的典型 HttpClient 服务,我正在努力将错误输出检索为错误回调中的对象,而不是可观察的。
...
}, (e) => {
HttpErrorHandling.process(e, this.messageService, this.loggerService, () => {
this.messageService.send(NotificationMessage['USER_REGISTRATION_TECHNICAL_ERROR'], MessageTypes.error);
});
});
});
当我想检索错误状态时,这不适合我的情况,当我尝试使用 err.status 获取它时,它是未定义的,因为我是在可观察到的
class HttpErrorHandling
public static process(err: HttpErrorResponse, messageService: MessageService, logger: LoggerService, callback: any) {
switch(err.status) {
case HttpStatusCodeEnum.HttpFailure: {
// Http failure, no internet connection
this.handleError(err.name, logger, null);
break;
}
...
相反,如果我像这样订阅可观察到的错误,我确实将错误作为对象检索,但这很混乱并且对性能不利(嵌套订阅)。还有另一种方法可以解决这个问题吗?
}, (e) => {
e.subscribe(
err => HttpErrorHandling.process(err, this.messageService, this.loggerService, () => {
this.messageService.send(NotificationMessage['USER_REGISTRATION_TECHNICAL_ERROR'], MessageTypes.error);
})
});
});
});
解决方案
我可能应该投反对票,我知道没有提供很多代码,我背后的原因是它的公司代码。简而言之,我没有看到有人改变了我们应该如何返回错误,而没有测试背后的含义,因为如果没有明确表达给 QA,谁真正测试了失败的 http 请求。无论如何,有人决定为我在代码中其他地方使用的服务返回错误:
catchError((err) => {
throw of(err);
})
我所要做的就是删除 of 方法,然后返回 err 。不知道为什么人们会将错误作为可观察值返回。
推荐阅读
- aws-lambda - Image not displaying in close response
- android - Create unique notes for users
- database - Transaction Management By @@Transactional Annotation
- php - Get title Attribute of input variable using PHP
- sql - 如果列的值匹配,则删除与特定 ID 对应的所有行
- graphql - 传递参数子类型 graphql
- python - python中的SQlite用户定义函数
- javascript - 有没有办法沿 Three.js 中的路径设置 ExtrudeBufferGeometrie 的初始形状方向?
- gis - 使用 OpenLayers 5 在地图上添加旋转的卫星图像
- php - Slim-3 php 框架显示页面未找到错误,即使 url 正确?