Nathan Donze Nathan Donze - 1 year ago 153
AngularJS Question

AngularJS - wait for multiple resource queries to complete

I have a single factory defined with ngResource:

App.factory('Account', function($resource) {
return $resource('url', {}, {
query: { method: 'GET' }

I am making multiple calls to the query method defined on this factory. The calls can happen asynchronously, but I need to wait for both calls to complete before continuing:

App.controller('AccountsCtrl', function ($scope, Account) {
$scope.loadAccounts = function () {
var billingAccounts = Account.query({ type: 'billing' });
var shippingAccounts = Account.query({ type: 'shipping' });

// wait for both calls to complete before returning

Is there a way to do this with AngularJS factories defined with ngResource, similar to jQuery's $.when().then() functionality? I would prefer not to add jQuery to my current project.

Answer Source

You'll want to use promises and $q.all().

Basically, you can use it to wrap all of your $resource or $http calls because they return promises.

function doQuery(type) {
   var d = $q.defer();
   var result = Account.query({ type: type }, function() {
   return d.promise;

]).then(function(data) {
   var billingAccounts = data[0];
   var shippingAccounts = data[1];

   //TODO: something...
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download