我有一个全局事件处理程序
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请求(发布或获取)时发生异常,我希望调用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方法,它将捕获我从服务器中抛出的异常。
谁能告诉我为什么会这样以及如何解决这个问题?
由于
答案 0 :(得分:0)
试试这个
this.http.post(url, JSON.stringify(data), {headers: headers})
.map(resp => resp.json())
.catch(err => throw new Error('I am not working'));