Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.12.2018, 14: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.
Ответить с цитированием
  #2 (permalink)  
Старый 09.01.2019, 06:30
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,154

Цитата:
но тем же способом не получается забрать тело из ошибки 500 из блока catch.
Почему? .pipe(catchError(e => of(true или false)))
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2019, 13:48
Интересующийся
Отправить личное сообщение для kotelok Посмотреть профиль Найти все сообщения от kotelok
 
Регистрация: 27.08.2018
Сообщений: 22

Получилось сделать по-другому, но за этот вариант тоже спасибо.

.flatMap(response => {
      return Observable.of(true);
    }).catch((error: HttpErrorResponse) => {
      var errorDto = error.error as SharedDto.ApiErrorDto;
      ....
    }

Ну и дальше уже детальный анализ как кода, так и тела ошибки.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение функции после выдачи результата AJAX запроса polearmik AJAX и COMET 2 22.04.2017 14:48
Синхронное выполнение GM_xmlhttpRequest grego Firefox/Mozilla 2 04.10.2013 22:17
как проверить выполнение get() запроса?! Brook jQuery 1 16.02.2013 18:23
Как приостановить выполнение скрипта до получения результата AJAX запроса? Хиросим AJAX и COMET 9 31.10.2011 08:56
Как "подождать" выполнение асинхронного запроса? WalterScott AJAX и COMET 25 05.06.2009 11:18