当计算机进入睡眠状态时 setTimeout 会发生什么?

新手上路,请多包涵

在现代网络浏览器中,假设我执行 setTimeout 10 分钟(12:00),5 分钟后让计算机进入睡眠状态,当系统再次唤醒时会发生什么?如果它在 10 分钟之前(12:09)或更晚(16:00)醒来,会发生什么情况?

我问的原因是因为我想每 10 分钟请求一个新的身份验证令牌,而且我不确定浏览器是否会做正确的事情并在长时间后唤醒时立即请求一个新令牌时间。

澄清:我不想不使用 cookies——我正在尝试在这里建立一个网络服务;是的,服务器将拒绝旧的和无效的令牌。

原文由 Sudhir Jonathan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

据我测试,它只是在计算机唤醒后停止并恢复。当计算机唤醒时,setInterval/setTimeout 不知道任何时间过去了。

我认为您不应该依赖 setTimeout/Interval 的准确性来处理时间紧迫的事情。对于谷歌浏览器,我 最近发现,如果激活它的选项卡失去焦点,任何超时/间隔(短于 1 秒)都会减慢到每秒一次。

除此之外,超时/间隔的准确性取决于运行的其他功能等。简而言之:它不是很准确。

因此,使用间隔和超时,根据它启动的函数中的开始时间检查时间会给你更好的准确性。现在,如果您从 12:00 开始,计算机将进入睡眠状态并在 16:13 左右醒来,检查 16:13 与 12:00,您确定必须更新令牌。可以 在此处 找到使用时间比较的示例

原文由 KooiInc 发布,翻译遵循 CC BY-SA 4.0 许可协议

将当前日期时间与页面加载时的日期时间进行比较,如下所示:

 //Force refresh after x minutes.
var initialTime = new Date();
var checkSessionTimeout = function () {
    var minutes = Math.abs((initialTime - new Date()) / 1000 / 60);
    if (minutes > 20) {
        setInterval(function () { location.href = 'Audit.aspx' }, 5000)
    }
};
setInterval(checkSessionTimeout, 1000);

原文由 Ben 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题