接收json异步响应的最有效方式
Most efficient way to receive json async responses?
(我的例子适用于C#、MVC、返回JSON、get-jquery、angular),但我希望它适用于更多。
我有一个网站,我的angular/html/js通过angular控制器调用~7个服务,async获取/显示数据(天气、路况等)。其中一些需要比其他更长的时间(从ms到~10s)。我想对我的服务进行一次调用,它会返回所有这些数据,但不会等到最后一次调用才返回任何数据(10秒)。
有没有一种方法可以打一个电话,并在我有结果时返回结果,并相应地显示结果?我是否需要一个具有类似"IsMore=T"的布尔值的重复调用,然后再次调用该服务?(听起来效率不高)。
理想情况下,我希望保持一个响应通道的开放,并保持泵送结果,直到它完成。可能的
我不确定我是否完全理解,但我认为你可以将响应承诺链接在一起,比如:
$scope.getWeatherData = function () {
return myWeatherService.get().then(function (resp) {
$scope.weatherData = resp;
});
}
$scope.getTrafficData = function () {
return myTrafficService.get().then(function (resp) {
$scope.trafficData = resp;
});
}
$scope.getWeatherData.then(getTrafficData).then(...chain others...);
这假设服务调用返回一个$http
承诺。
不管怎样,无论何时promise出现,数据都将在$scope
上,因此显示将随着promise的到来而更新。听起来您可能正在使用类似$q.all()
的东西,它会等到所有承诺都得到解决。
构建@reptilicus的答案:
$scope.getWeatherData = function () {
return myWeatherService.get().then(function (resp) {
$scope.weatherData = resp;
});
};
$scope.getTrafficData = function () {
return myTrafficService.get().then(function (resp) {
$scope.trafficData = resp;
});
};
$q.all([
$scope.getWeatherData(),
$scope.getTrafficData()
]).then(function () {
// do whatever's next, or nothing
});
将并行请求/接收两个响应(如果这是您想要的)。当收到相关响应时,每个请求的相关$scope属性将被填充,并且"下一步做什么"代码将在它们全部完成后运行。
注意,您需要将$q注入到控制器构造函数中才能正常工作。:)
编辑:我刚刚注意到@reptilicus确实提到了$q.all。链接.then
和$q_all的区别在于,在链接下,一个请求直到收到前一个请求才会启动。。。。
相关文章:
- Rails将JavaScript对象存储到Model的有效方式
- 如何在jQuery中以有效的方式创建链接
- 如何以最有效的方式实现这个多维数组
- HTML5使用Javascript填充文本标记的有效方式
- 以有效的方式搜索对象列表 mongo
- HTML5游戏中最有效的视差方式
- 在网页上连续播放mp3的最有效方式(如网络收音机)
- 接收json异步响应的最有效方式
- 解析JSON的有效方式
- 如何以有效的方式按给定数组对节点列表进行排序
- 有效方式:一事多插或多道事多插
- 从mobilejs/html5向服务器发送数据的最有效方式是什么,反之亦然
- 浏览器加载资源的最有效方式
- 在HTTP响应中发送大型比特流的有效方式
- 选择器的有效方式
- 在单个网页上一次显示一个调查声明的有效方式
- 在url中传递数组的有效方式
- PHP和JavaScript传输数据的最有效方式是什么?
- 使用jQuery链接滚动到部分页面的有效方式
- 基于时间运行代码的有效方式