Angular 如何";“展开”;一个区域管理员?
在Angular 2应用程序中,我有一个resolve guard,它会尝试xhr,如果失败,会抛出一个自定义错误:Angular 如何";“展开”;一个区域管理员?,angular,zonejs,Angular,Zonejs,在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 { construct
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;
}
}
export class MyErrorHandler implements ErrorHandler {
handleError(error) {
console.log('handling err', error);
// this prints a ZoneAwareError on the console
}
}
我的全局错误处理程序接收的是ZoneAwareError
的实例,而不是MyError
:
export class MyError extends Error {
constructor(message, routeSnapshot, code, err) {
super(message);
this.name = 'MyError';
this.routeSnapshot = routeSnapshot;
this.code = code;
this.err = err;
}
}
export class MyErrorHandler implements ErrorHandler {
handleError(error) {
console.log('handling err', error);
// this prints a ZoneAwareError on the console
}
}
错误
真的应该包装在区域wareerror
中吗?如何打开它以返回MyError
?依赖错误.拒绝
属性是否安全?(因为我可以在那里看到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本身是如何进行展开的:,但是它们似乎无法以任何方式处理
拒绝
(这非常有用),因此在展开之前,我使用以下方法:
if(error.hasOwnProperty('rejection'))
{
error = error.rejection;
}
zone.js中的接口