[英]How to bundle Angular $http.get() calls?
我有一个控制器,需要检索两个单独的REST资源,将填充两个下拉列表。 我想避免填充其中任何一个,直到两个$ http.get()调用都返回,这样下拉列表似乎同时填充,而不是一个接一个地插入。
是否可以捆绑$ http.get()调用并优雅地为两个返回的数组设置$ scope变量,而不必为两个场景编写状态逻辑,例如b之前的返回,b之前返回?
调用Angular $ http函数的返回值是使用$ q的Promise
对象(受Kris Kowal的Q启发的promise / deferred实现)。
看一下$q.all(promises)
方法文档:
将多个promise组合成一个promise,在解析所有输入promise时解析。
参数
- promises -
{Array.<Promise>}
- 一系列承诺。返回
{Promise}
- 返回将使用值数组解析的单个promise,每个值对应于promises数组中相同索引处的promise。 如果任何promises
通过拒绝得到解决,那么这个承诺将以相同的拒绝解决。
您可以使用$q.all
来“加入”您的http调用的结果,代码类似于:
app.controller("AppCtrl", function ($scope, $http, $q) {
$q.all([
$http.get('/someUrl1'),
$http.get('/someUrl2')
]).then(function(results) {
/* your logic here */
});
}
你的意思是这样的:
function someController( $scope, $http, $q ) {
var first_meth = $http.get("first_url"),
second_meth = $http.get("second_url");
$q.all([first_meth, second_meth]).then(function(all_your_results_array) {
//here you'll get results for both the calls
});
}
参考: Angular JS Doc
你可以在这里使用Async javsscript库: https : //github.com/caolan/async 。
使用系列调用。 它将进行2次调用,然后在完成两次调用时调用一次回调。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.