var app = angular.module('plunker', []);

app.config(['$routeProvider', function($routeProvider) {
        $routeProvider
          .when('/resolveView', {
            templateUrl: 'resolveView.html',
            controller: 'resolveCtrl',
            resolve: {
                people: function(TestService) {
                    return TestService.getPeople();
                },
                cars: function(TestService) {
                    return TestService.getCars();
                }
            }}
          ).otherwise({
            redirectTo: '/resolveView'
          });
    }]);
    
app.controller('MainCtrl', function($scope, $location) {
});

app.controller('resolveCtrl', function($scope, people, cars) {
  $scope.people = people;
  $scope.cars = cars;
});

angular.module('plunker')
.factory('AuthenticationService', function($http, $timeout, $q) {

  var deferred = $q.defer();

  return {
    getToken: function() {
      
      // if (!expired) {
      //    return deferred.resolve($window.localStorage.getItem('access_token'));
      // }
      
      
      // else refresh token and return it 
      // I simulate a $http API
      $timeout(function(){}, 2000).then(function(refresh_token){
        // we suposse that refresh_token is that string
        deferred.resolve('ThiSisAnewRefreshedToken');
      });
      
      return deferred.promise;
    }
  };

});


angular.module('plunker')
.factory('TestService', function($q, $http, $timeout, AuthenticationService) {
  
  var deferred = $q.defer();
  var token = AuthenticationService.getToken().then(function(data){
    deferred.resolve(data);
    return deferred.promise;
  });
  
  return {
    getPeople: function() {
        console.log('TOKEN evaluated?', token)
        
        // simulate that server accepts the refreshed token
        if(token === "ThiSisAnewRefreshedToken") {
          return $http.get('people.json');
        }
    },
    getCars: function() {
        console.log('TOKEN evaluated?', token)
        
        // simulate that server accepts the refreshed token
        if(token === "ThiSisAnewRefreshedToken") {
          return $http.get('cars.json');
        }
    }
  }
});
<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.0.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js" data-semver="1.0.7"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
   
   <div ng-view></div>
    
  </body>

</html>
/* Put your css in here */

a {
  color: blue;
  cursor: pointer;
  text-decoration: underline;
}

ul li  ul {
  display: none;
}

.open { 
   display: block; 
}
<h2>Scenario:</h2>
<p>OAuth server and an auth token expired. So I need to refresh it BEFORE of doing the $http call to get the desired resource. I tried to recreate that async calls through $timeout, becuase it is also async.</p>

<h2>Issue:</h2>
<p>When token is evaluated in lines 70 & 78, it already should be the refreshed token expected: <strong>ThiSisAnewRefreshedToken</strong> instead of a promise yet, as you can see in the console.log</p>

<h3>PEOPLE</h3>
<pre>{{people.data | json}}</pre>

<h3>CARS</h3>
<pre>{{cars.data | json}}</pre>
[{
  "id" : 1,
  "name": "Ben"
},
{
  "id" : 2,
  "name": "Jessie"
},
{
  "id" : 3,
  "name": "Laney"
},
{
  "id" : 4,
  "name": "Lincoln"
}]
[{
  "id" : 1,
  "brand": "Mercedes"
},
{
  "id" : 2,
  "name": "Ferrari"
},
{
  "id" : 3,
  "name": "Subaru"
},
{
  "id" : 4,
  "name": "Toyota"
}]