在这种情况下如何使用JavaScript setTimeout()
How to use JavaScript setTimeout() in this scenario
在我的Angular应用中,app.js
代码从服务器端检索了一个sessionID
和一个userID
。
同时,我的导航控制器正在设置一个菜单,该菜单也来自服务器端。
问题是我的导航控制器在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";
});
}
});
});
}
})();
navigation-controller.js代码(其中user和session变量还没有定义):
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);
}
如果userID和sessionID已经返回,您可以在控制器中使用$interval
检查每个x
毫秒数,如下所示:
var stop = $interval(function() {
if ($rootScope.rageSessionVars.sessionID != undefined) {
//SUCCESS CODE HERE - DON'T FORGET TO STOP THE INTERVAL!
$interval.cancel(stop);
}
}, 100);
我已经使用了100毫秒,更改以适应您的需要。美元区间API
您可以使用watcher:
$rootScope.$watch(function () {
return $rootScope.rageSessionVars.sessionID;
}, function (newValue, oldValue) {
if (newValue !== void 0) {
foo();
}
});
但是我认为你需要使用承诺
相关文章:
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- setInteval vs setTimeout
- 借助asp.net验证或java脚本对多个文本进行验证
- java.net和javascript之间正则表达式的差异
- 如何从Java/scala调用js美化程序
- 如何使用json将对象列表从java转换为javascript
- Java脚本时间添加
- WebDriverException:tinyMCE未在selenium Web driver java中定义
- 如何将字符串值从php页面发送到java脚本页面
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- DOM事件通过JSON转换为java
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- setTimeout可以与闭包内的函数一起使用吗
- Javascript setTimeout for an array
- JSON分析错误:Java中AJAX、Javascript和Servlet的意外EOF
- JavaFX+WebView/Javascript:setTimeOut不起作用调用堆栈来自Java
- 什么是错误的java脚本settimeout
- 是使java脚本执行同步更好或使用setTimeout来修复一些东西