2015-08-28 4 views
0

В моем приложении «Угловое» код app.js извлекает sessionID и userID со стороны сервера.Как использовать JavaScript setTimeout() в этом сценарии

В то же время мой контроллер навигации настраивает меню, которое также поступает со стороны сервера.

Проблема в том, что мой контроллер навигации выполняет ДОПОЛНЕНИЕ процедуры app.js. И результат в том, что мне присвоены переменные sessionID и userID.

В идеале, я хотел бы знать, как получить код app.js, чтобы стрелять раньше всего.

Однако, тем не менее, я хотел бы использовать функцию JavaScript setTimeout() для имитации отложенного вызова. Значит, я только хочу продолжить, когда определены мои идентификаторы sessionID и userID.

Мой app.js код (где инициализируются сеанс и пользователь вары):

(function() { 
 
    'use strict'; 
 
    angular.module('rage', [ 
 
     'ui.router', 
 
     'ui.bootstrap', 
 
     'ui.dashboard', 
 
     'kendo.directives'  
 
    ]).run(['$rootScope', '$state', 'userService', init]); 
 

 
    function init($rootScope, $state, userService) { 
 
     $rootScope.rageSessionVars = {}; 
 
     $rootScope.$state = $state; 
 

 
     userService.getInitParams().then(function (razorEnvJson) { 
 
      $rootScope.rageSessionVars = razorEnvJson; 
 
      userService.init(rzEnvJson).then(function (data) { 
 
       var response = data.status; 
 
       if (response.match(/SUCCESS/g)) { 
 
        userService.openUserSession(razorEnvJson).then(function (data) { 
 
         var sessionID = data.data[0]; 
 
         $rootScope.rageSessionVars.sessionID = sessionID; 
 
         $rootScope.rageSessionVars.userID = "bobmazzo1234"; 
 
         console.log("sessionID = " + sessionID); 
 
               
 
         $rootScope.rageSessionVars.currDashboardName = "Default"; 
 
        }); 
 
       } 
 
      }); 
 
     }); 
 
    } 
 

 
})();

Навигационная-controller.js код (где пользователь и сеанс вары не определены еще):

function activate() {    
 

 
    $timeout(getDashboards, 1000); // give time for app.js to init vars  
 
    
 
} 
 

 
function getDashboards() { 
 
      // GET ALL DASHBOARDS VIA API. 
 
      var timeout; 
 
      if ($rootScope.rageSessionVars.sessionID == undefined) { 
 
       ?? SHOULD I DO SOMETHING HERE IN CASE ??? 
 
      } 
 
      var sid = $rootScope.rageSessionVars.sessionID; 
 
      var userId = $rootScope.rageSessionVars.userID; 
 
      dashboardcontext.getDashboards(sid, userId); 
 
     }

+1

Возможно, вы захотите заглянуть в ['$ timeout'] (https://docs.angularjs.org/api/ng/service/$timeout), который является тем более способным для AngularJS'ish. – War10ck

+1

Возможно, вы захотите использовать обещания для этого случая. – toskv

ответ

1

Вы можете использовать $interval в контроллере, чтобы проверить каждый x количество миллисекунд, если идентификатор пользователя и SESSIONID вернулись, как это:

var stop = $interval(function() { 
    if ($rootScope.rageSessionVars.sessionID != undefined) { 
     //SUCCESS CODE HERE - DON'T FORGET TO STOP THE INTERVAL! 
     $interval.cancel(stop); 
    } 
}, 100); 

Я использовал 100 миллисекунд, изменение в соответствии с вашими потребностями. $interval API

+0

, поэтому я оставил свой app.js как есть, но я изменил навигацию-controller.js –

+0

Miles P - хорошо, поэтому я попробую вашу идею. –

+0

BINGO! Этот интервал - именно то, что я искал. –

1

Вы можете использовать Бодрствующий:

$rootScope.$watch(function() { 
    return $rootScope.rageSessionVars.sessionID; 
}, function(a, b) { 
    if(!a) return; 

    foo(); 
}); 

Но я думаю, что вам нужно использовать обещание.

Смежные вопросы