在浏览掘金文章的时候,看到了这篇文章《嘭,setTimeout炸了》。为了避免踩前人踩过的坑,所以记录一下。

场景

前端需要去展示倒计时,使用了setTimeout,但是不知道什么原因,倒计时没有生效,原本应该在倒计时技术之后才会呈现的效果居然直接呈现了。

追查之后才发现,原来setTimeou的延时值是有限制的。

如果超过限制,延时值将会被视为0,代码被立马执行。

重点 & 结论

setTimeout 的延时毫秒数是有限制的。millisec 参数是 Int32 类型的,最大值为 2^31 - 1,即 2147483647。一旦超过这个限制,millisec 参数将被视为 0,代码会被立马执行。

解决方案

  1. 产品层面:从产品设计层面,避免出现这么大的数值。
  2. 技术层面:在条件允许的情况下,使用 setInterval 代替 setTimeout