Javascript Angular$http—在接收响应数据时对其进行处理
我正在构建一个与后端服务器通信的简单UI。 UI向服务器发送一个要处理的URL,服务器将返回一个结果列表 关于结果,每个结果都需要时间来计算,但我仍然希望在UI中显示传入的结果,甚至可能对结果集使用Javascript Angular$http—在接收响应数据时对其进行处理,javascript,angularjs,json,http,Javascript,Angularjs,Json,Http,我正在构建一个与后端服务器通信的简单UI。 UI向服务器发送一个要处理的URL,服务器将返回一个结果列表 关于结果,每个结果都需要时间来计算,但我仍然希望在UI中显示传入的结果,甚至可能对结果集使用ng repeat,当从服务器接收到结果时,这些结果将被更新 问题是,Angular的$http服务返回的承诺只能处理成功和失败状态 我想知道是否存在某种“正在进行”的状态,我可以在其上运行回调函数 比如说,, 结果是JSON,包含一个结果数组: { results: [ {prop1:
ng repeat
,当从服务器接收到结果时,这些结果将被更新
问题是,Angular的$http服务返回的承诺只能处理成功和失败状态
我想知道是否存在某种“正在进行”的状态,我可以在其上运行回调函数
比如说,,
结果是JSON,包含一个结果数组:
{
results: [
{prop1: val1, prop2: val2}, // result 1
{prop1: val1, prop2: val2}, // result 2
{prop1: val1, prop2: val2}, // result 3
{prop1: val1, prop2: val2} // result 4
]
}
想象一下,在响应中发送每个结果之前,计算需要5-6秒
因此,想要的流程和行为是:
用户界面:
POST
请求$scope.results
ng repeat
将确保我在屏幕上看到它们
所以我唯一的问题是,在接收响应数据时,如何访问响应数据
顺便说一句,如果你有任何建议,以另一种方式做,我很高兴听到,只要它是简单的。。。这真的是一个简单的用户界面,这里不需要任何高级的东西
非常感谢。只有在后端支持的情况下,才能获得多部分结果。我所看到的json块上的唯一行为是,它一次提供全部内容,而不是一次获得一个片段。但是,如果您可以修改后端来实现这一点,那么您就可以完成各个部分。这是不可能的,因为HTTP请求的规范不提供此功能。 您必须发出多个请求(实现类似“分页”的功能)或尝试WebSocket(稍微复杂一点)
但是没有你所描述的“流动”。客户机说“嘿,服务器,给我数据”-然后服务器计算所有需要的数据-然后服务器以原子方式响应整个数据-而不是一步一步。如果服务器逐行发送到outputStream,每一行都是其他工作人员接收到的结果,该怎么办?这样我可以一步一步地发送响应。。。当然,响应过程将花费更多的时间,因为发送的行带有间隙。当我们谈论HTTP请求时,没有输出流这样的东西。有请求主体,这些请求主体以原子方式传输。如果您使用的是HTTP以外的其他技术(因此不是$HTTP服务),这确实是可能的,但这将是一种完全不同的方法。没有$http,没有承诺——但可能是一个Websocket连接。这取决于你。事实上,我只是理解,当我用身体回应时,我必须告诉客户身体的长度是多少——如果计算还没有完成,这是未知的。无论如何,非常感谢。如果这是可能的,至少我知道这与我的实现无关。没问题,伙计。如前所述,您仍然可以尝试对大量数据执行一系列请求(给我第一个条目…给我第二个条目…等等,直到服务器说“没有下一个条目”),您也可以这样做“给我前5个条目。。。给我6到10条。。。等等-但是你必须在双方都详细地实现这一点,但是在客户端,我怎样才能在它们到达时阅读它们,并对它们进行处理(动态地)?@johni
$q
服务有第三个用于进度通知的参数,并将承诺描述为与对象交互的接口,该对象表示异步执行的操作的结果,并且可能在任何给定时间点完成,也可能不完成。