gpt4 book ai didi

angular - 如何限制 ErrorHandler 的范围?

转载 作者:太空狗 更新时间:2023-10-29 17:26:52 26 4
gpt4 key购买 nike

我有一个这样定义的全局错误处理程序(已删除简化/专有信息):

export class ErrorsHandler extends CommonBase implements ErrorHandler {
constructor(protected loggingService: LoggingService,
private coreService: CoreService {

super(loggingService);
}

handleError(error: Error) {
if (error && error.stack && (error.stack.indexOf(Constants.PACKAGE_NAME) >= 0)) {
this.logSystemError(error, true);
this.coreService.showSystemError(error, this.owner);
}
else {
// Rethrow all other errors.
throw error;
}
}

并且在我的模块(并且只有我的模块)中,它被注册为这样的提供者:

export function errorHandlerFactory(loggingService: LoggingService, coreService: CoreService) {
return new ErrorsHandler(loggingService, coreService);
}

providers: [
{ provide: ErrorHandler, useFactory: errorHandlerFactory, deps: [LoggingService, CoreService] }
]

我的模块被别人消费了,我们一起组成了一个大应用。我的问题是所有脚本错误都被捕获了,即使我尝试过滤那些只与我的模块/包相关的错误,因为过滤是在 handleError() 中完成的。即使我重新抛出与我无关的错误(在上面的 else 中),其他模块/包的开发人员提示说我正在全局捕获所有内容并且他们得到的重新抛出的错误已经丢失了某些上下文/信息。

所以问题是,是否有可能以某种方式限制我的错误处理程序的范围以仅捕获和处理源 self 的模块/包的脚本错误(同时完全忽略应用程序中的所有其他脚本错误)?

经过多次谷歌搜索,我能想到的唯一替代方案是将 try/catch 放在各处,这是我尽可能避免的事情。

最佳答案

您可以尝试创建一个服务 - ErrorService 来共享 context,然后从 global error handlerthrow 错误。然后您可以从所需的组件捕获错误。

PFB的步骤:

  1. 创建错误服务如下:

    @Injectable({
    providedIn: 'root'
    })
    export class ErrorService {
    constructor() {}

    private error = new BehaviorSubject(new Error());
    error_message = this.error.asObservable();

    changeMessage(e: Error) {
    this.error.next(e);
    }
    }
  2. throw 来自 ErrorHandler 中的 handleError 方法的错误。 PFB 片段:

    handleError(error: Error) {
    if (error && error.stack &&(error.stack.indexOf(Constants.PACKAGE_NAME) >= 0))
    {
    this.logSystemError(error, true);
    this.coreService.showSystemError(error, this.owner);
    }
    else {
    //`errorService` is the `instance` for `ErrorService Component`
    //imported in the defined `ErrorHandler`
    this.errorService.changeMessage(error);
    // Rethrow all other errors.
    throw error;
    }
    }
  3. 使用try-catch 捕获组件 中的错误。使用 ErrorService 中的 error_message 进行相同的操作。

关于angular - 如何限制 ErrorHandler 的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55975239/

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