Угловая загрузка объектов 4/5/6 JSON - PullRequest
0 голосов
/ 25 мая 2018

Мне трудно реализовать прогрессивную загрузку данных с помощью новейшего Angular HttpClient.Итак, мне нужно сделать http-запрос на экспресс-сервер узла, и сервер должен начать отправку объектов JSON обратно клиенту, когда они станут доступны.До сих пор у меня есть экспресс-сервер node.js, отправляющий обратно объекты, подобные этому

response.chunkedEncoding = true;
response.contentType('application/json');
response.write(JSON.stringify({ title: 'My JSON object 1'}));
...
response.write(JSON.stringify({ title: 'My JSON object 2'}));

в конце сеанса

response.end();

Кажется, все работает нормально, как я мог видетьпрогресс загрузки в chrome, если я нажму URL-адрес сервера.

Теперь в Angular клиенте максимум, что я могу получить, это число байтов, полученных каждым из ответов сервера.как это:

map  {type: 0}
subscribe  undefined
map  HttpHeaderResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://myapiaddress", ok: true, …}
subscribe  undefined
map  {type: 3, loaded: 139}
map  {type: 3, loaded: 140}

, а затем после response.end ();называется Я получаю ошибку синтаксического анализатора JSON.Ошибка парсера JSON понятна.Это потому, что два объекта JSON не создают массив самостоятельно.Поэтому, когда HttpClient пытается объединить все в конечном результате, он не может проанализировать результат.Но я не хочу конечного результата.Мне нужен объект JSON на стороне клиента, когда они станут доступны.Если я укажу в «наблюдаю» что-то еще, кроме «событий» (например, «ответ» или «тело»), я вообще не получу никакого прогресса.

Как правильно обращаться с таким сценарием?Как я могу получить доступ к телу ответа во время событий прогресса?

1 Ответ

0 голосов
/ 20 июля 2018

Попробуйте subscribe(event=>, чтобы быть subscribe(event:any=>console.log(event) или subscribe((event:any)=>console.lo(event)

...