加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 如何“解包”ZoneAwareError?

发布时间:2020-12-17 17:36:04 所属栏目:安全 来源:网络整理
导读:在我的Angular 2应用程序中,我有一个解决方案,它会尝试xhr并在失败时抛出自定义错误: return this.service.getProduct (id) .catch (err = Observable.throw(new MyError(err.message,route,500,err))); MyError只是Error的扩展: export class MyError ext
在我的Angular 2应用程序中,我有一个解决方案,它会尝试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;
    }

}

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

export class MyErrorHandler implements ErrorHandler {

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

}

错误真的应该包含在ZoneAwareError中吗?如何解开它以获取MyError?依赖error.rejection属性是否安全? (因为我可以看到MyError).

===编辑:

好吧,我刚刚发现Angular在错误的不同子类型中包装错误,而不仅仅是ZoneAwareError.到目前为止,我有这个功能打开它们,但感觉有点hacky:

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

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

解决方法

您可以看到Angular本身是如何进行展开的: angular/modules/@angular/core/src/error_handler.ts,但它们似乎没有以任何方式处理拒绝(这非常有用),所以我在展开之前使用以下内容:

if(error.hasOwnProperty('rejection'))
    {
        error = error.rejection;
    }

zone.js中的UncaughtPromiseError接口

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读