2017-02-03 14 views
5

W moim Kątowymi 2 app Mam straży resolve która stara się XHR i generuje błąd niestandardowy, jeśli nie:Jak "rozwinąć" ZoneAwareError?

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

MyError jest po prostu przedłużeniem 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; 
    } 

} 

Moja globalny błąd Wózek odbiera wystąpienie ZoneAwareError zamiast MyError:

export class MyErrorHandler implements ErrorHandler { 

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

} 

Czy error naprawdę ma być opakowany w ZoneAwareError? Jak mogę go odpakować, aby odzyskać MyError? Czy można bezpiecznie polegać na właściwości error.rejection? (Ponieważ widzę tam MyError).

=== Edit:

Ok, właśnie odkrył, że kątowa owija błędów w różnych podtypów Error, nie tylko ZoneAwareError. Do tej pory mam tej funkcji, aby je rozpakować, ale czuje się trochę hacky:

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

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

Odpowiedz

Powiązane problemy