Я использую угловую функцию 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)
$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')
]);
}
};
});