Angular 2错误永远不会到达自定义错误处理程序

时间:2017-04-03 19:32:10

标签: angular error-handling observable

我有最简单的Angular(v2.4.3)自定义错误处理程序的实现,但仍然无法记录错误。什么可能是错的?

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
  }
}

sample-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

1 个答案:

答案 0 :(得分:5)

更改

com.sun.*

export class MyErrorHandler extends ErrorHandler {

请参阅此处https://angular.io/docs/ts/latest/api/core/index/ErrorHandler-class.html

您还应该删除使错误处理短路的export class MyErrorHandler implements ErrorHandler { 方法

.catch