如何在Angular Js中使用q.all?

时间:2015-07-07 12:20:43

标签: jquery angularjs angular-services

我正在使用角度q.all函数。这不能正常工作

  var app = angular.module('angularjs-starter', []);

app.controller('MainCtrl', function($scope, myService) {
  var a=1,b=2;
  myService.doBoth(a,b).then(function(a){
     $scope.blah =a;
  });
});

app.factory('myService', function($http, $q) {
    return {
      doBoth: function(a,b){

       $q.all([
        (function() {

            var d = $q.defer();
            $http.get('foo.json').then(function(data){
                d.resolve(data);
            });
            return d.promise;
        })(),
        (function() {
            var d = $q.defer();
            $http.get('bar.json').then(function(data){
                d.resolve(data);
            });
            return d.promise;
        })()
    ]).then(function(responses) {
        console.log(responses); //array of your responses
    });
      }
    }
})

我有这个错误

  

TypeError:无法读取未定义的属性'then'       at new(app.js:5)

1 个答案:

答案 0 :(得分:1)

$http.get()因为它会返回一个承诺。创建延期承诺的需求是多余的。您还需要返回$q.all()返回的承诺,以使其与您的控制器一起使用。

var app = angular.module('angularjs-starter', []);

app.controller('MainCtrl', function($scope, myService) {
  var a=1,b=2;
  myService.doBoth(a,b).then(function(response){
     var foo = response[0]; // foo result
     var bar = response[1]; // bar result
  });
});

app.factory('myService', function($http, $q) {
    return {
      doBoth: function(a,b){
       return $q.all([
            $http.get('foo.json'),
            $http.get('bar.json')
       ]);
      }
    };
});