Trong 2 ứng dụng kiễu góc của tôi, tôi có một người bảo vệ quyết tâm mà cố gắng một XHR và ném một lỗi tùy chỉnh nếu nó không thành công:Làm thế nào để "unwrap" một ZoneAwareError?
return this.service.getProduct (id)
.catch (err => Observable.throw(new MyError(err.message, route, 500, err)));
MyError
chỉ là một phần mở rộng của 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;
}
}
lỗi toàn cầu của tôi người xử lý nhận được một phiên bản của ZoneAwareError
thay vì MyError
:
export class MyErrorHandler implements ErrorHandler {
handleError(error) {
console.log('handling err', error);
// this prints a ZoneAwareError on the console
}
}
error
có thực sự được gói trong ZoneAwareError
không? Làm thế nào để tôi tháo nó ra để lấy lại MyError
? Có an toàn để dựa vào tài sản error.rejection
không? (Bởi vì tôi có thể thấy MyError
ở đó).
=== Edit:
Ok, tôi chỉ phát hiện ra rằng góc kết thúc tốt đẹp sai sót trong tiểu loại khác nhau của Error
, không chỉ ZoneAwareError
. Cho đến nay tôi có chức năng này để unwrap họ, nhưng nó cảm thấy một chút hacky:
function unwrap (err) {
let res = err.rejection ? err.rejection : err;
while (res.originalError) {
res = res.originalError;
}
res.name = res.name || 'unknown';
return res;
}