簡単なシナリオがあります-ヘッダーに値(ある種のトークン)を追加するインターセプターでhttp呼び出しを開始したいと思います。
問題は、トークンがhttp経由でも受信されることです(最初の呼び出しである必要があります)が、他のすべての呼び出しを行って、独自の呼び出しを発行する前に終了するのを待つ方法がわかりません...
.factory('sessionData', function () {
var currentToken = '[uninitialized-token]';
return {
getToken: function () {
return currentToken;
},
setAuthData: function (token) {
currentToken = token;
}
}
})
.factory('sessionInjector', ['sessionData', function (sessionData) {
var sessionInjector = {
request: function (config) {
console.log("sending with token: " + sessionData.getToken());
config.headers['x-header-sessionID'] = sessionData.getToken();
}
};
return sessionInjector;
}])
.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('sessionInjector');
}])
.run(['$http', 'configs', 'sessionData', function ($http, configs, sessionData) {
$http.get(configs.authApiUrl + 'login').then(function (ret) {
sessionData.setAuthData(ret);
console.log("successfully authenticated with token " + sessionData.getToken());
});
}])
.controller('TestCtrl', function($http){
$scope.p1 = 'Uninitialized';
$http.get('http://localhost/api/getData').then(function(ret){
$scope.p1 = ret;
});
});
問題はTestCtrl
、メソッドがトークンの取得を完了する前に http 呼び出しを発行することですrun
(その結果、ヘッダー値の値に[uninitialized-token]が含まれます)。
「実行」非同期メソッドが完了するまでコントローラーを待機させるにはどうすればよいですか?