js 中 setTimeout 计时器最大值


项目中踩坑,记录下。
没有意识到 setTimeout/setInterval 计时器有最大值问题。

setTimeout(() => {
  console.log(1111)
}, 2 ** 31)

这部分代码,不会等到计时器结束,而是会被会被立即执行。

原因

setTimeout/setInterval 使用 int32 存储延时参数值,也就是说最大延时值是 2^31-1(约为24.85天) ,超过这个值会被立即执行。

解决方案

web

在 web 页面中很少有需要这么大延时值得情况,根据业务场景,超过1小时,不做定时器设置,1小时以内,做定时器设置。

node

服务端,确实有类似的情况,比如1月一次的定时任务。建议使用 corn 代替 setTimeout,也会比 setTimeout 更加准确。


 上一篇
前端 font 优化 前端 font 优化
开发中,一般直接引入字体,使用即可,似乎字体本身并没有很多可以说道的地方,其实不然。字体本身涉及到印刷工业,是一个历史悠久的行业,css 字体的大部分属性都可以在印刷工业中找到映射。这篇博客,整理常见的字体使用细节。 衬线体和非衬线体衬线体
2021-04-11
下一篇 
vuex 4.0 源码解析 vuex 4.0 源码解析
vuex 源码短小精悍,很短时间就可以大致浏览一遍,值得学习。在后续看其他框架的过程中,也发现很多框架都有参考 vuex(比如 herbjs 的插件体系)。 猜想 一定有一个地方集中存放所有的数据(state),可以挂载到 window 上
2021-03-10
  目录