Search code examples
angularjsangular-ui-routerpromiseangularjs-routing

Angular promise should call other promises


I have a state which resolves as :

resolve: {
              accounts: function(utils) {
                return utils.getAccounts();
              },
              data: function(utils) {
                return utils.getData();
              },
              termsData: function(utils) {
                return utils.getTerms();
              }
            }

I need to make sure that data and termsData are called only after accounts is returned in angular resolve.

getAccounts function looke like :

 function getAccounts() {
            var deferred = $q.defer();
            Restangular.setBaseUrl(baseUrl());
            var accountsService = Restangular.all(accountsUrl);
            accountsService.post({headers}).then(function(data) {
              deferred.resolve(data);
            }, function(ex) {
              deferred.reject(ex);
            });
            return deferred.promise;
          }

Solution

  • You could add accounts as a dependency the same way like I suppose you do in controller:

    resolve: {
              accounts: function(utils) {
                return utils.getAccounts();
              },
              data: ['accounts', 'utils', function(accounts, utils) {
                  accounts.then(function(data){
                     return utils.getData();
                  }, function(data){
                     return $q.reject();
                  });
              }]
            }
    }