2017-02-03 31 views
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; 
} 

回答