运行函数之前的Javascript SessionStorage检查

时间:2018-03-01 22:45:23

标签: javascript

我有一个我正在打电话的功能。叫做getStatus()。但是这个函数需要有一个可能存在的已定义的SessionStorage变量。如果变量存在,那么我想继续执行getJob()函数。如果它不存在,我想尝试定义SessionStorage变量,然后执行getJob()函数。

像这样:

function getStatus()
  {
    if (sessionGet("jwt") != null)
    {
        getJob(document.getElementById('job').value, document.getElementById('id').value);
    }
    else
    { 
        var myValue = '{{ myValue }}';
        console.log("Token is missing, acquiring another one!");
        var nextToken = setTimeout(function(){ getSessionToken(myValue); }, 5000);
        console.log("Reissued token issued is");
        console.log(nextToken);
        getJob(document.getElementById('job').value, document.getElementById('id').value);
   }
  }

这是读取SessionStorage变量的函数:

function sessionGet(key) {
  let stringValue = window.sessionStorage.getItem(key)
    if (stringValue !== null) {
      let value = JSON.parse(stringValue)
        let expirationDate = new Date(value.expirationDate)
        if (expirationDate > new Date()) {
          return value.value
        } else {
          window.sessionStorage.removeItem(key)
        }
    }
    return null
}

当我查看Chrome控制台时,我看到正在编写的SessionStorage变量,但是读取变量的getJob()函数没有看到它。如果我重试,那么getJob()函数就能读取它。我的想法是getJob()函数在写入变量之前触发。这就是我在那里尝试setTimeout()的原因。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

正如ztadic91指出的那样,我需要在getJob()函数调用周围包装setTimeout,因为它需要等待创建SessionStorage变量。做完之后,测试得很好。感谢快速帮助!