首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何“打开”一个ZoneAwareError?

如何“打开”一个ZoneAwareError?
EN

Stack Overflow用户
提问于 2017-02-03 15:44:46
回答 1查看 3K关注 0票数 5

在我的角2应用程序中,我有一个解析保护程序,它尝试一个xhr并在失败时抛出一个自定义错误:

代码语言:javascript
运行
复制
return this.service.getProduct (id)
    .catch (err => Observable.throw(new MyError(err.message, route, 500, err)));

MyError只是Error的一个扩展

代码语言:javascript
运行
复制
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的实例。

代码语言:javascript
运行
复制
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。到目前为止,我有一个函数来打开它们,但它感觉有点烦琐:

代码语言:javascript
运行
复制
function unwrap (err) {
    let res = err.rejection ? err.rejection : err;

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 20:15:59

您可以看到展开本身是如何进行的:handler.ts,但是它们似乎不以任何方式处理rejection (这是非常有用的),所以在展开之前我使用以下方法:

代码语言:javascript
运行
复制
    if(error.hasOwnProperty('rejection'))
    {
        error = error.rejection;
    }

UncaughtPromiseError接口在zone.js中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42027956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档