как использовать q.all в Angular Js?

0

Я использую угловую функцию 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" неопределенного на новом (app.js: 5)

Теги:
angular-services

1 ответ

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')
       ]);
      }
    };
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню