Angular HttpClient - получение сообщений о прогрессе от сервера до окончательного ответа - PullRequest
0 голосов
/ 07 февраля 2019

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

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

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

Ответы [ 3 ]

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

Вы пробовали Observables

Observables обеспечивают поддержку передачи сообщений между издателями и подписчиками в вашем приложении.Observables предлагают значительные преимущества по сравнению с другими методами обработки событий, асинхронного программирования и обработки нескольких значений.

Обновление

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

const intervalId = setInterval(() => {
      if (CHECK IF DONE) {
           clearInterval(intervalId);
    // DO THE THING YOU WANT AFTER COMPLETE
      }
      else {
        // GET PROGRESS
      }
    }, 1000);
0 голосов
/ 07 февраля 2019

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

По-моему, вам нужно будет сделать два запроса к серверу

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...