【问题标题】:Angular 2 error never get to custom error handlerAngular 2 错误永远不会到达自定义错误处理程序
【发布时间】:2017-08-28 19:17:51
【问题描述】:

我已经获得了 Angular (v2.4.3) 自定义错误处理程序的最简单实现,但仍然无法记录错误。有什么问题?

app.module.ts

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

我的错误处理程序.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

【问题讨论】:

    标签: angular error-handling observable


    【解决方案1】:

    改变

    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
    

    【讨论】:

    • 我认为这是因为您使用.catch 方法指定了另一个处理程序。删除它,您应该能够看到您的自定义错误处理程序被调用
    • 是的,就是这样。谢谢!您可以将其发布为答案,以便我将其标记为解决方案吗?
    • 使用extends 代替如果implements 让您能够将自定义服务注入MyErrorHandler 类,而不是使用private injector: Injector
    • 不应该也可以使用extends吗?我的理解是扩展允许您保留默认功能,然后添加到它(这是我想知道如何做的)。我怎样才能让它与扩展一起工作?
    • 在我的情况下,它被调用了两次,有什么信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2011-10-02
    • 1970-01-01
    • 2018-04-29
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多