javascript - 'chunked' 响应进入 AngularJS 后立即显示的方法是什么?

标签 javascript node.js angularjs q chunked-encoding

目前,我在显示从我的 Web 服务 Node.js 服务器 (localhost:3000) 发送到运行在 Node.js 服务器 (localhost:3001) 上的模拟客户端的响应“ block ”时遇到问题。

  • edit * - 当前的实现只使用 Angular 的 %http 作为没有 web-sockets 的传输

逻辑如下:

1.在“Cities”的客户端创建一个数组并将它们(从 AngularJS Controller )发布到位于以下位置的 Web 服务: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 。然后,Web 服务运行其进程以生成“城市”矩阵(例如,如果传递了 5 个城市,它将返回一个 5×5 [25 项] 的 JSON 矩阵)。但问题是它通过 Node 的 > response.write( data )

将数据以“ block ”的形式传回

旁注 - 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* }
]


目前的问题是不是“分 block ”响应没有到达其目的地,而是我不知道有一种方法可以在分 block 进入后立即开始处理数据。

这是一个问题,因为我试图做一个 250x250 的矩阵并等待完整的响应使 Angular 显示结果的能力重载,因为它试图一次完成所有操作(从而炸毁页面)。

这也是一个问题,因为我正在尝试将响应保存到 MongoDB,并且它只能处理一定大小的数据,然后才会“太大”而 MongoDB 无法处理。

我尝试查看 Angular 的 $q and the promise/defer API ,但是我对如何实现它有点困惑,并且还没有找到一种方法来开始处理数据 block 。

This question关于处理 block 的 SO 似乎也没有多大帮助。

任何有关在返回 AngularJS 时尝试显示分 block 数据的帮助或提示将不胜感激。

如果回复可以是展示该技术的信息性代码片段,我将不胜感激,因为看到一个示例不仅可以帮助我了解“文本”描述。

-- 谢谢

最佳答案

没有示例,因为我不确定您在传输代码方面使用的是什么/如果您有可用的 websocket:

$http 不支持执行任何回调,直到在请求结束时传回成功代码 - 它使用 200 监听 .onreadystatechange > -like 值。

如果你想做这样的流,你要么需要使用 $http 并将其包装在一个传输层中,该传输层会调用多个 $http结束并返回一个成功的 header 。

您也可以使用 websockets,而不是调用 $http,而是在套接字中发出一个事件。

然后,为了将 block 返回给客户端,让服务器在后端将每个 block 作为新事件发出,并让前端监听该事件并为每个事件进行处理。

关于javascript - 'chunked' 响应进入 AngularJS 后立即显示的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22103927/

相关文章:

javascript - 在js api中获取facebook好友列表

javascript - 三星智能电视覆盖(新闻行情)应用程序

javascript - 如何使用 img.onload 返回函数?

javascript - javascript中的RSA加密和Java中的解密

javascript - Nodejs 服务器上的 Jointjs 错误 - 未捕获的 ReferenceError :Joint is not defined

node.js - 动态刷新 div,无需直接 DOM 操作

node.js - 在 Node.js 中使用 TXN 将附件上传到 CouchDB 问题

javascript - 页面转换无法正常工作

javascript - Angularjs - 复选框禁用和启用

angularjs - 检测 uib-popover 何时打开和关闭?