在现代网络浏览器中,假设我执行 setTimeout
10 分钟(12:00),5 分钟后让计算机进入睡眠状态,当系统再次唤醒时会发生什么?如果它在 10 分钟之前(12:09)或更晚(16:00)醒来,会发生什么情况?
我问的原因是因为我想每 10 分钟请求一个新的身份验证令牌,而且我不确定浏览器是否会做正确的事情并在长时间后唤醒时立即请求一个新令牌时间。
澄清:我不想不使用 cookies——我正在尝试在这里建立一个网络服务;是的,服务器将拒绝旧的和无效的令牌。
原文由 Sudhir Jonathan 发布,翻译遵循 CC BY-SA 4.0 许可协议
据我测试,它只是在计算机唤醒后停止并恢复。当计算机唤醒时,setInterval/setTimeout 不知道任何时间过去了。
我认为您不应该依赖
setTimeout/Interval
的准确性来处理时间紧迫的事情。对于谷歌浏览器,我 最近发现,如果激活它的选项卡失去焦点,任何超时/间隔(短于 1 秒)都会减慢到每秒一次。除此之外,超时/间隔的准确性取决于运行的其他功能等。简而言之:它不是很准确。
因此,使用间隔和超时,根据它启动的函数中的开始时间检查时间会给你更好的准确性。现在,如果您从 12:00 开始,计算机将进入睡眠状态并在 16:13 左右醒来,检查 16:13 与 12:00,您确定必须更新令牌。可以 在此处 找到使用时间比较的示例