Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何";“展开”;一个区域管理员?_Angular_Zonejs - Fatal编程技术网

Angular 如何";“展开”;一个区域管理员?

Angular 如何";“展开”;一个区域管理员?,angular,zonejs,Angular,Zonejs,在Angular 2应用程序中,我有一个resolve guard,它会尝试xhr,如果失败,会抛出一个自定义错误: return this.service.getProduct (id) .catch (err => Observable.throw(new MyError(err.message, route, 500, err))); MyError只是Error的扩展: export class MyError extends Error { construct

在Angular 2应用程序中,我有一个resolve guard,它会尝试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;
    }

}
export class MyErrorHandler implements ErrorHandler {

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

}
我的全局错误处理程序接收的是
ZoneAwareError
的实例,而不是
MyError

export class MyError extends Error {

    constructor(message, routeSnapshot, code, err) {
        super(message);
        this.name = 'MyError';
        this.routeSnapshot = routeSnapshot;
        this.code = code;
        this.err = err;
    }

}
export class MyErrorHandler implements ErrorHandler {

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

}
错误
真的应该包装在
区域wareerror
中吗?如何打开它以返回
MyError
?依赖
错误.拒绝
属性是否安全?(因为我可以在那里看到
MyError

==编辑:

好的,我刚刚发现Angular将错误包装在不同的
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;
}

您可以看到Angular本身是如何进行展开的:,但是它们似乎无法以任何方式处理
拒绝
(这非常有用),因此在展开之前,我使用以下方法:

    if(error.hasOwnProperty('rejection'))
    {
        error = error.rejection;
    }
zone.js中的接口