runtimeZero runtimeZero - 1 year ago 85
AngularJS Question

Angular Resource calls and $q


I have my code setup somewhat as below:

$scope.init = function(){
return $q.all([resource1.query(),resource2.query(),resource3.query()])
$scope.data1 = result[1];
$scope.data2 = result1[2];
$scope.data3 = result[3];

console.log(data1); //prints as [$resolved: false, $then: function]


I was under the impression that the "then" function will be called only when all the resources get resolved. However this is not what I am seeing in my code. If I print data1, I get unresolveed.

Any clue as to what I am missing here ??

Answer Source

I ran into this problem, and it was quite confusing. The problem appears to be that calling a resource action doesn't actually return an http promise, but an empty reference (that is populated when the data returns from the server -see the return value section of the $resource docs).

I'm not sure why this results in .then(result) returning an array of unresolved promises, but to get each resource's promise, you need to use resource1.query().$promise. To re-write your example:

$scope.init = function() {
  return $q.all([resource1.query().$promise, resource2.query().$promise, resource3.query().$promise])
           .then( function(result) {
             $scope.data1 = result[0];
             $scope.data2 = result[1];
             $scope.data3 = result[2];



I hope that saves someone else some time.