我想在用户登录后开始计算当前会话。因为我将用户详细信息存储在sessionStorage中,所以我需要执行location.reload才能使API请求能够访问sessionStorage中的令牌。问题是,一旦我重新加载,函数中的其余代码就会被清除或忽略。我尝试了consol日志记录,它显示了大约半秒钟,然后控制台被清除。怎么会发生,以及我将如何继续触发setTimeout函数并使它持久化?
loginUser: function(username, password) {
var loginDetails = {"username": username, "password": password};
return loginResource.save({}, loginDetails).$promise.then(function(response){
var user = {
name: username,
token: response.token,
}
sessionStorage.user = angular.toJson(user);
$window.location.reload();
})
.catch(function(reason) {
console.warn("Failed login", reason);
throw reason;
});
},
beginCountdown: function() {
console.log('begin');
setTimeout(function(){
sessionStorage.removeItem('user');
$window.location.reload();
}, 3000)
},
答案 0 :(得分:2)
因为我将用户详细信息存储在sessionStorage中,所以我需要执行一次location.reload才能使API请求能够访问sessionStorage中的令牌。
sessionStorage.setItem('key', 'value');
let data = sessionStorage.getItem('key');
console.log(data);
…显示存储在第1行并在第2行检索的数据。
一旦我重新加载,函数中的其余代码将被清除或忽略。
页面是您的JavaScript运行所处的环境。
重新加载页面等同于重新引导计算机,并想知道Windows应用程序为什么不保持其状态。用JS编写程序可以保存状态,并在再次打开时重新加载,这是可能的,但是您似乎并没有这样做。
不重新加载页面。解决真正的问题。 (最有可能在加载JavaScript程序时从会话存储中读取数据,然后仅将更新写入会话存储中,而不是写入要保留要使用的数据副本的变量中。)>