如何绑定角$http.get()调用?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我有一个控制器,它需要检索两个独立的REST资源,这些资源将填充两个下拉列表。我希望避免在两个$http.get()调用都返回之前填充它们,这样下拉列表就会同时填充,而不是一个接一个地滴进来。

是否可以捆绑$http.get()调用并优雅地为两个返回的数组设置$Scope变量,而不必为这两种情况编写状态逻辑,例如,a在b之前返回,b在a之前返回?

提问于
用户回答回答于

调用Angular $ http函数的返回值是一个Promise使用$ q的对象(一个受Kris Kowal's Q启发的promise / deferred实现)。

查看$q.all(promises)方法文档:

将多个承诺组合成单个承诺,并在所有输入承诺解决时解决。

返回 {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
    });
}

扫码关注云+社区