AngularJS仅在解析时返回两个http get请求

时间:2015-08-07 09:15:14

标签: javascript angularjs

我有一个Angular应用程序,在控制器中我需要调用一个函数来生成两个http get请求,我需要这个函数在它们被解析时返回这些值。我无法在$ routeProvider解析中生成它们,因为此函数需要在同一个控制器中获取的值。

我展示了控制器的一部分:

function myController(info) {
 var vm = this;
 vm.name = info.data.name;

 vm.extra_data = MyService.getExtras(name);
}

以下是该服务代码的一部分:

function myService($http, $q, API_EVENT1, API_EVENT2) {
 return {
  getExtras: getExtras
 }

 function getExtras(name) {
  var request1 = API_EVENT1 + '/' + name; 
  var request2 = API_EVENT2 + '/' + name;

 }
}

由于我尝试了几种方法,功能尚未完成,但我根本没有成功。

我的问题是如何返回(在getExtras函数中)两个请求的结果。我尝试过使用$ q.defer,$ q.all和promises,但我无法实现它。

例如,使用$ q.all,我必须检索结果,但是当我调用该函数时,对象extra_data是未定义的,因为请求已异步执行。

提前感谢您的回复。

1 个答案:

答案 0 :(得分:1)

我会使用$q.all从Service返回组合承诺,并在控制器中处理结果。 e.g:

function myService($http, $q, API_EVENT1, API_EVENT2) {
  return {
    getExtras: getExtras
  }
  function getExtras(name) {
    return $q.all([
      $http({method: 'GET', url: API_EVENT1 + '/' + name}), 
      $http({method: 'GET', url: API_EVENT2 + '/' + name})])
     );
  }
}

function myController(info) {
  var vm = this;
  vm.name = info.data.name;

  MyService.getExtras(name).then(function(data) {
    vm.extra_data.first = data[0];
    vm.extra_data.second = data[1];
  });
}