【问题标题】:Angular 4 - Http error doesn't get to custom global error handlerAngular 4 - Http 错误没有到达自定义全局错误处理程序
【发布时间】:2017-09-19 04:09:55
【问题描述】:

我有一个全局事件处理程序

import { ErrorHandler, Injectable, Injector } from '@angular/core';
import { Router } from '@angular/router';
@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
errorMsg: string;
stackTrace: string;
constructor(private injector: Injector) {
}
handleError(error) {
    var router = this.injector.get(Router);
    this.errorMsg = JSON.parse(error._body).message;
    this.stackTrace = JSON.parse(error._body).stackTrace;
    router.navigate(["error", { errMsg: this.errorMsg, stackTrace:this.stackTrace }]);
    //alert(error._body);
}
}

我将它包含在提供程序中:

 providers: [PricingEventService, {
    provide: ErrorHandler,
    useClass: GlobalErrorHandler
}],

如果在执行 HTTP 请求(post 或 get)时出现异常,我希望 GlobalErrorHandler 会被调用 - 我在 post 方法中抛出了异常

 saveEvent(event: PricingEvent): Observable<string> {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.http.post('/pricingevent', event, options)
        .map((response: Response) => <string>response.json().value.errMsg);
}

但是,从未调用过 GlobalErrorHandler - 如果我在服务调用中使用 .catch 方法,它将捕获我从服务器抛出的异常。

谁能告诉我为什么会这样以及如何解决这个问题?

谢谢

【问题讨论】:

    标签: angular error-handling global


    【解决方案1】:

    试试这个

    this.http.post(url, JSON.stringify(data), {headers: headers})
           .map(resp => resp.json())
           .catch(err => throw new Error('I am not working'));
    

    【讨论】:

    • 我最不想做的就是在所有地方添加 .catch。虽然我很确定这会起作用。
    猜你喜欢
    • 2017-08-28
    • 2013-03-06
    • 2019-01-27
    • 2011-12-29
    • 2019-07-04
    • 2023-04-04
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多