如何处理异常两次

时间:2016-06-02 09:58:12

标签: error-handling typescript angular

我扩展了ExceptionHandler类:

import {Injectable, ExceptionHandler} from '@angular/core';

export class FirstError extends Error {
    handle() {
        console.log("This is firstError handler");
    }
}

export class AnotherError extends Error {
    handle() {
        console.log("This is AnotherError handler");
    }
}

export class _ArrayLogger {
    res = [];
    log(s: any): void { this.res.push(s); }
    logError(s: any): void { this.res.push(s); }
    logGroup(s: any): void { this.res.push(s); }
    logGroupEnd() {};
}

@Injectable()
export class CustomExceptionHandler extends ExceptionHandler {
    constructor() {
        super (new _ArrayLogger(), true);
    }

    call(exception: any, stackTrace = null, reason = null) {
        // I want to have original handler log exceptions to console
        super.call(exception, stackTrace, reason);

        // If exception is my type I want to do some additional actions
        if (exception.originalException instanceof Error) {
            exception.originalException.handle();
        }
    }
}

我的目标是让super.call将错误记录到控制台作为原始Angular2 ExceptionHandler,并另外执行我自己的异常句柄。不幸的是,在这种情况下,只有在第一次抛出错误时才会调用super。当第二个,第三个..发生时,超级不会被调用。如何让它工作,所以原来的console.log将错误记录到控制台,另外还有错误处理?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题但是能够通过在第二个参数(rethrowException)的构造函数中传递false来使其工作。

constructor() {
    super (new _ArrayLogger(), false);
}

参数的名称表明正确的值确实是true;对我来说似乎有点落后但是有效。