2017-04-03 7 views
1

私はAngular(v2.4.3)カスタムエラーハンドラの最も単純な実装を得ていますが、それでもエラーを記録することはできません。何が間違っていますか? throwed角2エラーは決してカスタムエラーハンドラには到着しません

app.module.ts

providers: [ 
    { provide: ErrorHandler, useClass: MyErrorHandler } 
] 

私の誤りhandler.ts

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

@Injectable() 
export class MyErrorHandler extends ErrorHandler { 

    constructor(private errorHandlerService: ErrorHandlerService) { 
    super(); 
    } 

    public handleError(error: any): void { 
    console.log('error'); // nothing 
    } 
} 

サンプルservice.ts(エラーをスローしようとしている)

addSomething(data) { 
    let bodyString = JSON.stringify(data); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post(this.url + 'expense', bodyString, options) 
     .map((res: Response) => res.json()) 
     .catch(this.handleError); 
    } 

    private handleError(error: any) { 
    console.log(error.json()); // error: { message: 'Some error' } 

    return Observable.throw(error.json()); 
    } 

エラーサービスではMyErrorHandlerに決して行きません。何が間違っていますか?

ことが重要だ場合、私は知りませんが、コンソールに、私はまた、このような何か得た:

POST http://path/to/api 422 // logged by zone.js 

答えて

4

export class MyErrorHandler implements ErrorHandler { 

に変更

export class MyErrorHandler extends ErrorHandler { 

https://angular.io/docs/ts/latest/api/core/index/ErrorHandler-class.html

をこちらを参照

また、エラー処理を短絡する.catchメソッドを削除する必要があります。

return this.http.post(this.url + 'expense', bodyString, options) 
    .map((res: Response) => res.json()) 
    .catch(this.handleError);  // remove this method call 
+0

ありがとうございました。残念ながら、それはまだ動作しません。 –

+0

あなたは '.catch'メソッドを使って別のハンドラを指定したと思います。それを削除すると、カスタムエラーハンドラが呼び出されるのを確認できるはずです – coderek

+0

はい、それです。ありがとうございました!答えとして投稿することができますので、解決策としてマークすることができますか? –

関連する問題