我有一个控制器,需要检索两个单独的REST资源,将填充两个下拉菜单。我希望避免在两个$ http.get()调用都返回之前填充它们中的任何一个,以便下拉似乎同时被填充,而不是一个接一个地涓涓细流。
是否可以绑定$ http.get()调用并优雅地为两个返回的数组设置$ scope变量,而无需为两种场景编写状态逻辑,例如, b之前的收益,b之前的收益?
我有一个控制器,需要检索两个单独的REST资源,将填充两个下拉菜单。我希望避免在两个$ http.get()调用都返回之前填充它们中的任何一个,以便下拉似乎同时被填充,而不是一个接一个地涓涓细流。
是否可以绑定$ http.get()调用并优雅地为两个返回的数组设置$ scope变量,而无需为两种场景编写状态逻辑,例如, b之前的收益,b之前的收益?
调用角$http函数的返回值是使用$qPromise
对象(一个承诺/延期执行由Kris Kowal's Q启发) 。
看看在$q.all(promises)
方法的文档:
将多个承诺变成一个承诺,当 所有输入承诺的决心,得到解决。
参数
- 承诺 -
{Array.<Promise>}
- 承诺的数组。返回
{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
});
}
你可以使用异步javsscript库在这里:https://github.com/caolan/async。
使用系列调用。它将完成2个呼叫,然后在完成两个呼叫时调用一个回叫。
仅供参考 - 问题标题说“链”,但身体描述了一个连接。不确定在这里编辑是否合适。 –