Angular HttpClient - получение сообщений о ходе выполнения с сервера перед окончательным ответом

Я использую службу Angular HttpClient для вызова веб-службы, выполнение которой может занять несколько минут. Я хотел бы получать статус выполнения (включая процент и сообщение) для отображения в браузере перед окончательным ответом. Есть ли в Angular механизм для поддержки этого?

Я пытался отправить статус 100 с сервера с информацией о ходе выполнения как часть заголовка, но это не работает. HttpClient поддерживает API ProgressEvent, но только для отслеживания загрузки/выгрузки запроса, состоящего из нескольких частей.

Я мог бы создать другую службу, которую затем опрашивал бы по таймеру, но есть ли другой более стандартный способ добиться этого?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
213
3

Ответы 3

Вы можете сделать что-то вроде создания BehaviorSubject для сообщений в веб-службе и подключить его в своих компонентах для ответа. Вы просто отправляете сообщение в BehaviourSubject. Затем, когда вы хотите, чтобы он исчез, отправьте пустое сообщение. Взгляните на то, что предлагает RxJs.

Вы пробовали Наблюдаемые

Observables provide support for passing messages between publishers and subscribers in your application. Observables offer significant benefits over other techniques for event handling, asynchronous programming, and handling multiple values.

Обновлять

Вы можете использовать таймер, который является основным вариантом, если выше не работает.

const intervalId = setInterval(() => {
      if (CHECK IF DONE) {
           clearInterval(intervalId);
    // DO THE THING YOU WANT AFTER COMPLETE
      }
      else {
        // GET PROGRESS
      }
    }, 1000);

Я использую методы публикации и запроса HttpClient для обращения к внутреннему серверу приложений (написанному на C++). Сервер получает запрос и отправляет ответ. На один запрос я могу получить один ответ в своем приложении Angular. Это прекрасно работает. Я пытаюсь получить ответы от сервера, чтобы получить информацию о ходе выполнения. Если сервер отправляет ответ с HTTP-статусом 200, клиент больше не может получать ответы.

Dalbir Singh 07.02.2019 01:35

@DalbirSingh: если у вас есть другая конечная точка для получения прогресса, таймер - еще один вариант.

CharithJ 07.02.2019 01:42

Я не думаю, что у angular есть стандартный способ сделать это.

На мой взгляд, вам нужно будет сделать два запроса к серверу.

  • Во-первых, запрос к конечной точке, которая фактически запускает длительный процесс. Эта конечная точка запустит процесс в отдельном потоке и немедленно вернет идентификатор этого процесса клиенту для проверки состояния.
  • С идентификатором процесса, возвращенным из первого запроса, вы можете вызвать конечную точку проверки статуса. Вы можете установить интервал для проверки прогресса и обновления пользовательского интерфейса.

Другие вопросы по теме