Как обработать фрагментированный ответ HTTP Post сразу в клиентском браузере в angular 6/7

У нас есть служба клиент\сервер REST API. В конкретном почтовом запросе сервер должен начать длительную операцию, а клиент должен ждать и получать уведомление о ходе выполнения, пока операция не будет выполнена. Уведомление о ходе выполнения представляет собой простое сообщение в виде строки json, которое должно быть видно пользователю сразу после его отправки сервером.

Сервер отправляет фрагментированные строки JSON во время операции.

Как я должен реагировать на полученные фрагментированные данные (из почтового запроса) сразу после их прибытия? Я использую Angular 6 и пробовал разные методы, но безуспешно.

Я попытался установить для параметра httpClient «reportProgress» значение true, он просто разделяет ответ на разные отчеты о ходе выполнения, но по-прежнему собирает все фрагменты сервера в один буфер массива.

Я также попытался создать HttpInterceptor, я получил тот же «раздел» ответа, но не фактические фрагменты сервера.

Тестирование функциональных 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
2
0
1 957
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

I have tried to set the httpClient option "reportProgress" to true, it just splits the response to different progress reports, but it still collects all the server chunks to single array buffer.

Это встроено в базовый вызов XHR (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType). В Firefox есть настраиваемый тип ответа (moz-chunked-arraybuffer), но не существует стандартного способа получения подобного фрагментированного ответа.

Браузеры поддерживают загрузку файлов, которые на самом деле не доступны через JS, но будут потоковыми. В противном случае вам нужно загрузить все содержимое в память.

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

Также актуально: https://github.com/angular/angular/issues/26289

Ответ принят как подходящий

Я разбираюсь: Используя XMLHttpRequest, зарегистрируйтесь в событиях прогресса и установите тип содержимого в коде узла сервера: text/jason. События выполнения запускаются для данных каждого фрагмента сервера.

Можете объяснить логику пользовательского интерфейса для этого ??

user2900572 07.10.2021 13:09

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