Показать сообщение отдельно
  #1 (permalink)  
Старый 27.12.2018, 15:04
Интересующийся
Отправить личное сообщение для kotelok Посмотреть профиль Найти все сообщения от kotelok
 
Регистрация: 27.08.2018
Сообщений: 22

Синхронное выполнение HTTP-запроса
У компонента есть гвард, реализующий 'CanDeactivate', который производит вызов метода 'validate' компонента и на выходе ожидает 'true' или 'false'.

Сам метод 'validate' компонента выполняет обращение к сервису для проверки введённых пользователем данных.
validate(): boolean {
    httpClient.post("api/someservice/validate", userData)
  }
Подскажите, как правильно забрать результат выполнения, чтобы получилась следующая логика:
1. Если метод post вернул 200(OK) без тела, то метод возвращает 'true' и гвард разрешает запрошенную навигацию.
2. Если метод post завершился с ошибкой, то получить тело ответа, проанализировать его и, в зависимости от некоторой логики, вернуть либо 'true', либо 'false'.

Через простой 'subscribe', разумеется, не получается, т.к. его выполнения продолжается после того, как validate возвращает управление..
Через '.pipe(map(response =>' удаётся синхронно обработать 200ОК и вернуть true, но тем же способом не получается забрать тело из ошибки 500 из блока catch.
Ответить с цитированием