AngularJS: appelle une fonction particulière avant tout contrôleur de page partiel

Je veux appeler une fonction particulière: GetSession() au début de mon chargement de l'application. Cette fonction rend un $http appeler et obtenir un jeton de session: GlobalSessionToken à partir du serveur. Ce jeton de session est ensuite utilisé dans d'autres contrôleurs de logique et d'extraire des données à partir du serveur. J'ai appeler ce GetSession()dans le contrôleur principal: MasterController dans $routeChangeStart événement, mais comme un appel asynchrone, mon code va de l'avant à CustomerController avant la $http réponse.

Voici mon code:

var GlobalSessionToken = '';  //will get from server later 

//Define an angular module for our app 
var myApp = angular.module('myApp', ['ngRoute']); 

//Define Routing for app 
myApp.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider. 
      when('/customer', { 
          templateUrl: 'partials/customer.html', 
          controller: 'CustomerController', 
          resolve: { 
            loadData: function($q){ 
                return LoadData2($q,'home'); 
            } 
          } 
      }). 
      otherwise({ 
          redirectTo: '/home'
      }); 
}]); 

//controllers start here and are defined in their each JS file 
var controllers = {}; 

//only master controller is defined in app.js, rest are in separate js files
controllers.MasterController = function($rootScope, $http){
    $rootScope.$on('$routeChangeStart', function(){

        if(GlobalSessionToken == ''){
            GetSession();
        }

        console.log('START');
        $rootScope.loadingView = true;
    });

    $rootScope.$on('$routeChangeError', function(){
        console.log('ERROR');
        $rootScope.loadingView = false;
    });
};

controllers.CustomerController = function ($scope) { 
    if(GlobalSessionToken != ''){
        //do something
    }
} 

//adding the controllers to myApp angularjs app 
myApp.controller(controllers); 
//controllers end here 


function GetSession(){
    $http({
        url: GetSessionTokenWebMethod,
        method: "POST",
        data: "{}",
        headers: { 'Content-Type': 'application/json' }
    }).success(function (data, status, headers, config) {
        GlobalSessionToken = data;
    }).error(function (data, status, headers, config) {
        console.log(data);
    });
}

Et mon HTML a sections suivantes:

<body ng-app="myApp" ng-controller="MasterController">
    <!--Placeholder for views-->
    <div ng-view="">
    </div>
</body>

Comment puis-je m'assurer que ce GetSession() est toujours appelé au tout début de mon démarrage de l'application et avant tout autre contrôleur appels et a également appelé qu'une seule fois.

EDIT: C'est comment j'ai ajouté run méthode comme par Maxim réponse. Encore besoin de trouver un moyen d'attendre jusqu'à $http appel renvoie avant d'aller de l'avant avec les contrôleurs.

//Some initializing code before Angular invokes controllers
myApp.run(['$rootScope','$http', '$q', function($rootScope, $http, $q) {
   return GetSession($http, $q);
}]);

function GetSession($http, $q){
    var defer = $q.defer();

    $http({
        url: GetSessionTokenWebMethod,
        method: "POST",
        data: "{}",
        headers: { 'Content-Type': 'application/json' }
    }).success(function (data, status, headers, config) {
        GlobalSessionToken = data;
        defer.resolve('done');
    }).error(function (data, status, headers, config) {
        console.log(data);
        defer.reject();
    });

    return defer.promise;
}

source d'informationauteur Pawan Pillai | 2014-02-03