instanceof Response не работает при обработке ошибок angular 2 - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь добавить общую обработку ошибок для вызова 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

enter image description here

  • handleHttpError равно function без class, поэтому я могу добавить другой сервис для этой функции? В моем случае я не могу inject NotificationService, поэтому я добавил его как agrs

  • Я звоню service function в resolve из route resolver. Как отменить переход к следующему маршруту, если служба выдает ошибку.

  • Я действительно запутался, это лучший способ добавить error handling в angular
...