gpt4 book ai didi

angular - 如何 "unwrap"ZoneAwareError?

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

在我的 Angular 2 应用程序中,我有一个 resolve guard,它尝试 xhr 并在失败时抛出自定义错误:

return this.service.getProduct (id)
.catch (err => Observable.throw(new MyError(err.message, route, 500, err)));

MyError 只是 Error 的扩展:

export class MyError extends Error {

constructor(message, routeSnapshot, code, err) {
super(message);
this.name = 'MyError';
this.routeSnapshot = routeSnapshot;
this.code = code;
this.err = err;
}

}

我的全局错误处理程序接收到 ZoneAwareError 实例而不是 MyError:

export class MyErrorHandler implements ErrorHandler {

handleError(error) {
console.log('handling err', error);
// this prints a ZoneAwareError on the console
}

}

error 真的应该包含在 ZoneAwareError 中吗?我如何打开它以返回 MyError?依赖 error.rejection 属性是否安全? (因为我可以在那里看到 MyError)。

=== 编辑:

好的,我刚刚发现 Angular 将错误包装在 Error 的不同子类型中,而不仅仅是 ZoneAwareError。到目前为止,我有这个功能来解开它们,但感觉有点老套:

function unwrap (err) {
let res = err.rejection ? err.rejection : err;

while (res.originalError) {
res = res.originalError;
}
res.name = res.name || 'unknown';
return res;
}

最佳答案

您可以看到 Angular 本身是如何展开的: angular/modules/@angular/core/src/error_handler.ts ,但是他们似乎没有以任何方式处理rejection(这非常有用)所以我在展开之前使用以下内容:

    if(error.hasOwnProperty('rejection'))
{
error = error.rejection;
}

UncaughtPromiseError zone.js 中的界面。

关于angular - 如何 "unwrap"ZoneAwareError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027956/

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