【问题标题】:Why is rest of function code cleared when firing window.location.reload?为什么在触发 window.location.reload 时会清除其余功能代码?
【发布时间】:2019-05-28 18:32:22
【问题描述】:

我想在用户登录后开始计算当前会话。因为我将用户详细信息存储在 sessionStorage 中,所以我需要执行 location.reload 以便 API 请求能够访问 sessionStorage 中的令牌。问题是,一旦我重新加载,函数中的剩余代码就会被清除或忽略。我尝试了控制台日志记录,它显示大约半秒钟,然后控制台被清除。怎么会,我怎样才能继续触发我的 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)
},

【问题讨论】:

  • 如果您重新加载页面,那么这是正常行为......如果这适用于您,您可以稍后在脚本中移动重新加载
  • 使用sessionStorage 时不需要重新加载页面,因为它是一个同步操作(据我所知-当然localStorage 是)-您的代码可以引用存储的数据紧接着。

标签: javascript angularjs


【解决方案1】:

因为我将用户详细信息存储在 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 程序时从会话存储中读取数据,然后只将更新写入会话存储,而不是写入保存正在使用的数据副本的变量。)

【讨论】:

  • 那么,一旦 sessionStorage 填充了新值,如何根据 sessionStorage 值更新我的 JavaScript?
  • 您更新程序正在查看的任何内容以获取数据以及存储的版本
  • 我明白了,但是有没有办法更新整个视图和控制器,而不必更新对 sessionStorage 的每个引用?我在整个应用程序中都引用了 sessionStorage。
  • “我在整个应用程序中都引用了 sessionStorage。” — 重构应用程序,使其每个部分不会独立地从同一来源提取数据。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2020-07-01
相关资源
最近更新 更多