Как можно отобразить «чанкированные» ответы, как только они поступят в AngularJS?
В настоящее время у меня возникла проблема с отображением фрагментов ответов, которые я отправляю с сервера Node.js веб-службы (localhost: 3000) на симулированный клиент, работающий на сервере Node.js (localhost: 3001).
edit * - Текущая реализация просто использует Angular% http в качестве транспорта без веб-сокетовЛогика выглядит следующим образом:
1 Создайте массив на стороне клиента в «Городах» и отправьте их (из контроллера AngularJS) в веб-службу, расположенную по адресу: localhost: 3000 / getMatrix
$http({
method: 'POST',
url: 'http://localhost:3000/getMatrix',
data: cityArray
}).
success(function (data,status,headers,config){
// binding of $scope variables
// calling a local MongoDB to store the each data item received
for(var key in data){
$http.post('/saveRoutes', data[key])
.success(function (data, status){
// Data stored
})
.error(function (data, status){
// error prints in console
});
}
}).
error(function (data,status,headers,config){
alert("Something went wrong!!");
});
2 Затем веб-служба выполняет свой процесс для создания матрицы «городов» (например, если было пройдено 5 городов, она вернула бы матрицу JSON 5by5 [25 элементов]). Но загвоздка в том, что он передает данные в виде кусков благодаря Node's response.write (данные )
Примечание: Node.js автоматически устанавливает в заголовке «Transfer-Encoding»: «chunked».
* Other code before (routing/variable creation/etc.) *
res.set({
'Content-Type':'application/json; charset=utf-8',
});
res.write("[\n");
* Other code to process loops and pass arguments *
// query.findOne to MongoDB and if there are no errors
res.write(JSON.stringify(docs)+",\n");
* insert more code to run loops to write more chunks *
// at the end of all loops
res.end("]");
// Final JSON looks like such
[
{ *data* : *data* },
{ *data* : *data* },
......
{ *data* : *data* }
]
В настоящее время проблема заключается вне что ответ «chunked» не достигает своего места назначения, но я не знаю, как начать обработку данных, как только они появятся.
Это проблема, так как я пытаюсь создать матрицу размером 250x250 и жду полного отклика, который перегружает способность Angular отображать результаты, поскольку он пытается сделать все это сразу (таким образом, разрывая страницу).
Это также проблема, поскольку я пытаюсь сохранить ответ в MongoDB, и он может обрабатывать только определенный размер данных, прежде чем он станет «слишком большим» для обработки MongoDB.
Я пытался заглянуть в Angular's$ д иAPI обещания / отсрочки, но я немного запутался в том, как это реализовать, и не нашел способа начать обработку фрагментов данных по мере их поступления.
Этот вопрос на ТАК о работе с кусками тоже не очень помогло.
Будем весьма благодарны за любую помощь или советы по отображению фрагментированных данных, связанных с AngularJS.
Если бы ответы могли быть информативными фрагментами кода, демонстрирующими эту технику, я был бы очень признателен, так как просмотр примера помогает мне узнать больше, чем текстовое описание.
-- Спасибо