为什么在触发window.location.reload时清除其余功能代码?

时间:2019-05-28 10:11:40

标签: javascript angularjs

我想在用户登录后开始计算当前会话。因为我将用户详细信息存储在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)
},

1 个答案:

答案 0 :(得分:2)

  

因为我将用户详细信息存储在sessionStorage中,所以我需要执行一次location.reload才能使API请求能够访问sessionStorage中的令牌。

That isn't true

sessionStorage.setItem('key', 'value');
let data = sessionStorage.getItem('key');
console.log(data);

…显示存储在第1行并在第2行检索的数据。

  

一旦我重新加载,函数中的其余代码将被清除或忽略。

页面是您的JavaScript运行所处的环境。

重新加载页面等同于重新引导计算机,并想知道Windows应用程序为什么不保持其状态。用JS编写程序可以保存状态,并在再次打开时重新加载,这是可能的,但是您似乎并没有这样做。

不重新加载页面。解决真正的问题。 (最有可能在加载JavaScript程序时从会话存储中读取数据,然后仅将更新写入会话存储中,而不是写入要保留要使用的数据副本的变量中。)