Синхронное выполнение 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. |
Цитата:
|
Получилось сделать по-другому, но за этот вариант тоже спасибо.
.flatMap(response => { return Observable.of(true); }).catch((error: HttpErrorResponse) => { var errorDto = error.error as SharedDto.ApiErrorDto; .... } Ну и дальше уже детальный анализ как кода, так и тела ошибки. |
Часовой пояс GMT +3, время: 16:42. |