gpt4 book ai didi

angular - 我可以自定义 Angular 全局错误处理程序,使其不仅仅是一个错误参数吗?

转载 作者:行者123 更新时间:2023-12-03 07:52:53 25 4
gpt4 key购买 nike

关注 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com