2017-04-03 50 views
1

我已經得到了最簡單的Angular(v2.4.3)自定義錯誤處理程序的實現,但仍然無法記錄錯誤。什麼可能是錯誤的?角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 extends ErrorHandler { 

export class MyErrorHandler implements 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

是的,就是這樣。謝謝!你可以將它作爲答案發布,以便將其標記爲解決方案嗎? –