我正在使用角度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)
答案 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')
]);
}
};
});