setTimeout 对比 睡眠模式

Rod*_*phe 5 javascript settimeout sleep-mode

根据我在几个 SO 答案中的理解,如果计算机在 asetTimeout被调用后进入睡眠模式,则应忽略睡眠期。

例如:

  • 时间: setTimeout(foo, 30000);
  • t0+20s:电脑进入睡眠模式
  • t0+40s:电脑退出睡眠模式
  • t0+50s:foo被调用

但是,我的测试显示以下行为:

  • 时间: setTimeout(foo, 30000);
  • t0+20s:电脑进入睡眠模式
  • t0+40s:计算机退出睡眠模式并被foo调用

我的理解是,当计算机唤醒时,如果在休眠期间会触发超时,则立即触发,否则在t0 + [超时值]时触发。

那么预期的行为是什么?所有浏览器和操作系统都一样吗?

我的一项测试(在 Windows 10 上使用最新版本的 Chrome):https : //codepen.io/robloche/pen/GRJvEJB

Rod*_*phe 2

总结一下上面的评论:

  • 我所描述的行为似乎对每个人都有意义。
  • 我仍然不确定是否符合规范或所有浏览器都以这种方式实现。

我最初的问题是更新身份验证令牌,最终我得到了一个不使用的解决方案setTimeout(感谢/sf/answers/444313551/):

  • 当我获得令牌时,我计算并存储下一个续订日期
  • setInterval经常检查下一次续订日期是否已经过去。

这样,计算机在下一个续订日期之前 1 秒或之后 36 小时唤醒并不重要。