0

При возникновении ошибки любого запроса все функции перестают быть функциями. Например, есть сервис для работы с пользователями, у которого есть метод authorizationStatus:

authorizationStatus(): Observable<boolean> {
  return this._httpClient.get<boolean>(ApiUrls.authorizationStatus)
    .retry(retryConnectCount)
    .catch(this._logService.handleServerError);
}

Если во время запроса происходит ошибка, то функция handleServerError начнет свою работу, но любая функция, вызванная из ее тела, выдаст ошибку. Например если в классе LogService будут методы addError и handleServerError:

  public addError(error: string) {
    console.error(error);
  }

  public handleServerError(error: Response) {
    console.error(error);
    this.addError(error.statusText);
    return Observable.throw(error.json().error || 'Server error');
  }

То будет получена ошибка

this.addError is not a function

При том, что console.error(error); сработает как нужно. Если закоментировать эту функцию, то выдаст ошибку на следующей функции:

error.json is not a function

Ошибка появляется при вызове любой нестандартной функции. Как мне решить эту проблему?

Скрин с ошибкой:введите сюда описание изображения

Kunoichi
  • 2,333

1 Answers1

0

Сделайте так:

authorizationStatus(): Observable<boolean> {
    const self = this;
    return this._httpClient.get<boolean>(ApiUrls.authorizationStatus)
        .retry(retryConnectCount)
        .catch(self._logService.handleServerError);
}
Sergey Rogachev
  • 632
  • 6
  • 18
  • это не поможет, так как внутри handleServerError this будет установлен функцией catch – Grundy Nov 16 '17 at 17:38
  • @Grundy проблема не связана с this (по крайней мере я так думаю). Объект error является вполне нормальным объектом, но его функции тоже вызвать невозможно. – Kunoichi Nov 16 '17 at 17:55
  • @mirypoko, ты ошибаешься. – Grundy Nov 16 '17 at 17:57