Restangular: неудавшиеся запросы прекращают выполнение с await - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть перехватчик ошибок, как показано ниже:

RestangularProvider.addErrorInterceptor((response) => {

    const error = EnumerableFromObject(response.error.Errors)
      .Select(i => i.Value.Message)
      .FirstOrDefault();
    toastr.error(error, "Error");

    return true;
  });
}

Ниже приведен код моей службы аутентификации:

  async Login(login: string, password: string) {
    const sessions = this.rest.all("sessions");
    const params = {Login: login,Password: password };
    const response = await sessions.post(params).toPromise();
    return response;
  }

И вот как я вызываю его в моем компоненте:

this.loader.show();
const response = await this.authorizationService.Login(login, password);
this.loader.hide();

Поэтому мне нужно скрыть загрузчик после того, как служба завершена, сбой или нет.

Моя проблема возникает, когда запрос не выполняется по какой-либо причине - например, неверные учетные данные - выполнение останавливается, &оно никогда не достигает this.loader.hide();

Как я могу справиться с этим без использования then.В моем проекте все методы вызываются с await.Так что я не могу удалить ожидание и использовать тогда.Это потребует очень много переделок.

Кто-нибудь может сказать мне, что мне здесь не хватает?

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема в том, что у вас нет обработки ошибок.Если ваш запрос не выполнен, часть await сгенерирует исключение - это означает, что функция закрыта -> ваш .hide() вызов никогда не будет достигнут

Чтобы справиться с этим, вы можете заключить его в try catch, например

this.loader.show();
try {
    const response = await this.authorizationService.Login(login, password);
} catch (error) {
    // do something with the error here
}
this.loader.hide();
...