在浏览掘金文章的时候,看到了这篇文章《嘭,setTimeout炸了》。为了避免踩前人踩过的坑,所以记录一下。
场景
前端需要去展示倒计时,使用了setTimeout,但是不知道什么原因,倒计时没有生效,原本应该在倒计时技术之后才会呈现的效果居然直接呈现了。
追查之后才发现,原来setTimeou的延时值是有限制的。
如果超过限制,延时值将会被视为0,代码被立马执行。
重点 & 结论
setTimeout 的延时毫秒数是有限制的。millisec 参数是 Int32 类型的,最大值为 2^31 - 1,即 2147483647。一旦超过这个限制,millisec 参数将被视为 0,代码会被立马执行。
解决方案
- 产品层面:从产品设计层面,避免出现这么大的数值。
- 技术层面:在条件允许的情况下,使用
setInterval
代替setTimeout
。