如何让$ http调用返回$ q的承诺和数据?

时间:2014-06-30 11:11:46

标签: angularjs

我有以下脚本:

$q.all([
    getActive(),
    getUser()
])
.then(function (results) {
    var x = results[0];
    var y = results[1];
}


function getActive() {
    $http({
        url: '/api/Test/GetActive',
        method: "GET"
    })
};

function getUser() {
    $http({
        url: '/api/Test/GetUser',
        method: "GET"
    })
};

我希望看到变量x和y包含$ http调用的结果,但它们都显示为undefined。

有人可以建议我如何让这些电话回复承诺。我实际上认为$ http确实返回了一个承诺,所以我很困惑。

2 个答案:

答案 0 :(得分:2)

您似乎错过了returngetActive()函数中的getUser()语句。

试试这个:

$q.all([
    getActive(),
    getUser()
])
.then(function (results) {
    var x = results[0];
    var y = results[1];
}


function getActive() {
    return $http({
        url: '/api/Test/GetActive',
        method: "GET"
    });
};

function getUser() {
    return $http({
        url: '/api/Test/GetUser',
        method: "GET"
    });
};

答案 1 :(得分:1)

这是一个有效的例子。我用几个小方法改变了你的代码。注意:来自各个调用的返回promise,调用$ http的简化方法,以及从then()函数中返回返回结果的数据:

http://plnkr.co/edit/YStkRt?p=info

function MainCtrl($scope, $q, $http) {
  $q.all([
      getActive(),
      getUser()
  ])
  .then(function (results) {
      $scope.ip = results[0].data;
      $scope.headers = results[1].data;
  });

  function getActive() {
      return $http.get('http://ip.jsontest.com/');
  }

  function getUser() {
      return $http.get('http://headers.jsontest.com/');
  }
}