主要观点:JavaScript 的 setTimeout
在约 25 天后会出现问题,作者创建了 setBigTimeout
模块来解决此问题,可设置很大的延迟时间,通过将多个较短超时时间链接在一起实现,能接受 bigint
类型的延迟时间,安装或查看源代码可尝试使用该模块。
关键信息:
setTimeout
是延迟代码执行的方式,以毫秒为单位提供超时时间和要调用的函数。- 大多数 JavaScript 运行时中,超时时间用 32 位有符号整数表示,最大约 24.9 天,超过则会出现奇怪现象,如设置 40 天的超时时间函数会立即执行。
setBigTimeout
工作方式类似setTimeout
,可接受很大延迟,不能将字符串作为第一个参数,通过链接多个较短超时时间实现,作者写了模拟时钟的自动化测试但未等待 84 年验证其有效性。
重要细节:- 示例代码展示了
setTimeout
和setBigTimeout
的使用方法,如setTimeout(() => { console.log("This runs after 2 seconds"); }, 2000);
和setBigTimeout(() => { console.log("It's been 84 years..."); }, EIGHTY_FOUR_YEARS_IN_MILLISECONDS);
等。 - 提到
setTimeout
函数实际上是在指定时间后排队,并非总是在精确指定时间运行,可参考 "What the heck is the event loop anyway?" 了解更多。 setBigTimeout
不允许将字符串作为第一个参数,除此外与setTimeout
工作方式相同。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。