作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关注 https://angular.io/api/core/ErrorHandler我可以覆盖全局错误处理程序来处理错误对象,我喜欢我可以声明自己的全局错误处理程序并将其导入任何我需要的地方的方式。
但是对于 RxJS,我使用 catchError(this.handleError(my, params, go, here))
很多。
我想全局化我的handleError()
方法,并将其合并到我的全局错误处理程序中。但这看起来在技术上是不可能的。
这就是我的handleError
方法可以,结合 RxJS 的 catchError
通过 (1) 将错误记录到记录器 (2) 将其记录到控制台和 (3) 返回虚拟 Observable
来处理错误使 RxJS 调用能够顺利完成。
@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
constructor(private messageService: MessageService) { }
public handleError<T>(
error: HttpErrorResponse, operation = 'operation', result?: T) {
var errorMessage = '';
if (error.error instanceof ProgressEvent) {
errorMessage = `Client error occurred: ${error.message}`;
} else {
errorMessage = `Adam's error ${error.status}: ${error.message}`;
}
console.error(errorMessage);
this.messageService.add(`${operation} failed: ${errorMessage}`);
return of(result as T);
}
}
handleError()
,并像其他所有服务一样将其注入(inject)到任何地方,但这似乎很笨拙。
最佳答案
如果你能够让你的类脱离 Angular 上下文,你可以为 RxJS 创建一个自定义操作符。这并不是您问题的真正解决方案,而是一种解决方法:如果没有其他人提供解决方案,请在最后使用它:
export function handleCustomError<T>(...args) {
// Out of Angular's context, you should not have a dependency in your constructor
const errorHandler = new GlobalErrorHandler();
return catchError<T>(errorHandler.handleError(...args));
}
关于angular - 我可以自定义 Angular 全局错误处理程序,使其不仅仅是一个错误参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54629423/
我是一名优秀的程序员,十分优秀!