我正在尝试为angular 2服务中的http
调用添加一般错误处理。
代码如下:
service.ts
return this._http
.post(`${appConstant.apiConfig.BASE_PROXY_URL}/test`, filters)
.toPromise()
.then(res => {
return res.json().data;
})
.catch(error => {
return handleHttpError(error, this.notificationsService);
});
http-error-handlers.ts
import { Observable } from 'rxjs/Observable';
import { NotificationsService } from 'angular2-notifications';
export const handleHttpError = (error: Response | any, notificationService: NotificationsService) => {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
const err = body['error'] || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
notificationService.error('', errMsg, { showProgressBar: false });
console.error(errMsg);
return Observable.throw(errMsg);
};
它存在一些问题,例如:
error instanceof Response
返回false
,尽管error is Response type
handleHttpError
是function
而没有class
,那么我可以向该函数注入另一个服务吗?就我而言,我无法inject NotificationService
,所以我将其添加为agrs
我正在service function
的{{1}}中呼叫resolve
。如果服务抛出错误,如何取消到下一条路线的导航。
route resolver
中添加error handling
的更好方法