在我的角2应用程序中,我有一个解析保护程序,它尝试一个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
)。
===编辑:
好的,我刚刚发现角包装错误在不同的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;
}
发布于 2017-02-06 20:15:59
您可以看到展开本身是如何进行的:handler.ts,但是它们似乎不以任何方式处理rejection
(这是非常有用的),所以在展开之前我使用以下方法:
if(error.hasOwnProperty('rejection'))
{
error = error.rejection;
}
UncaughtPromiseError接口在zone.js中。
https://stackoverflow.com/questions/42027956
复制相似问题