Я пытаюсь добавить общую обработку ошибок для вызова http
в сервисах angular 2.
Код выглядит как:
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
в resolve
из route resolver
. Как отменить переход к следующему маршруту, если служба выдает ошибку.
- Я действительно запутался, это лучший способ добавить
error handling
в angular