2016-06-02 5 views
0

私は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(); 
     } 
    } 
} 

私の目標は、元Angular2 exceptionHandlerのようにコンソールにエラーを記録super.call持っており、さらに自分自身の例外ハンドルを行うことです。残念ながら、このようなシナリオでは、スーパーはエラーが最初にスローされるときにのみ呼び出されます。第2、第3が発生すると、スーパーは呼び出されません。元のconsole.logがエラーをコンソールに記録するように動作させる方法と、エラー処理を追加する方法はありますか?

答えて

0

私は同じ問題を抱えていましたが、falseを2番目のパラメータ(rethrowException)のコンストラクタに渡して動作させることができました。

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

パラメータの名前は、正しい値が実際trueであることを示唆しています。私に少し後ろに見えますが、それは動作します。