5
在我的角2的應用程序我有嘗試一個XHR如果失敗,拋出一個自定義錯誤下決心後衛:如何「解開」ZoneAwareError?
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;
}