Ошибка при работе с Angular: {имя функции} is not a function

173
16 ноября 2017, 05:45

При возникновении ошибки любого запроса все функции перестают быть функциями. Например, есть сервис для работы с пользователями, у которого есть метод 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

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

Answer 1

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

authorizationStatus(): Observable<boolean> {
    const self = this;
    return this._httpClient.get<boolean>(ApiUrls.authorizationStatus)
        .retry(retryConnectCount)
        .catch(self._logService.handleServerError);
}
READ ALSO
type error this reduce is not a function

type error this reduce is not a function

Есть 2 куска кода

159
Распарсить строку с помощью preg_match

Распарсить строку с помощью preg_match

Имеются такие данные:

229
вывод телефона в сообщение при отправки письма через форму

вывод телефона в сообщение при отправки письма через форму

Есть форма отправки сообщения, есть поле email, из него нужно сделать поле с телефоном, и что бы телефон был в письме вместе с сообщением:

253
приватный метод область видимости

приватный метод область видимости

Почему возникает ошибка PHP Fatal error: Class 'user\login\SystemCommand\DateTime' not found in

246