美文网首页
踩了setTimeout的坑

踩了setTimeout的坑

作者: 蒹葭de | 来源:发表于2017-05-05 22:19 被阅读135次

今天测试说,蒹葭同学,uat环境有个bug,秒杀产品还没结束,但是前端显示的是已经结束了,你看一下。
我内心OS:妈蛋,又出bug了。
不过还是乖乖的去debug了一下代码,最后排查出来是设置的定时器没有生效,直接执行了。

var timer = new Date('xxxx-xx-xx') - new Date('xxxx-xx-xx');
setTimeout(function(){
  //TODO some code
},timer)

但是TODO里的代码是直接运行了。
what fuck!!怎么会这样,定时器竟然没有起作用。
于是查了一下mdn文档。
mdn文档这样写道:

Maximum delay value
Browsers including Internet Explorer, Chrome, Safari, and Firefox store the delay as a 32-bit signed integer internally. This causes an integer overflow when using delays larger than 2147483647, resulting in the timeout being executed immediately.

链接地址:https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout

大致翻译过来意思就是:

IE Chrome Safari Firefox 等32位的浏览器用延迟的时候,如果延迟的时间大于2147483647 毫秒的话,会导致超时,而立刻执行。

顺便说一句,2147483647 这个毫秒数正好是2的31次方-1
这样的话,就不难理解了,如果你设置的timer超过2的31次方,那么setTimeout就无效了,而立刻执行,这个也就解释了为什么设置的函数会立刻执行的原因了。
找到这个问题之后,也思考了下,为什么会出现这种炒鸡大的timer呢?原来是这个时间点都是接口restful下发的,没法控制,所以前端在兼容这个的时候,就采取了一个比较猥琐的办法,如果这个timer大于2147483647这个值,就赋值这个值,否则就是timer。

timer = timer > 2147483647 ? 2147483647 : timer;

😄😄最终“完美解决”bug了。

相关文章

  • 踩了setTimeout的坑

    今天测试说,蒹葭同学,uat环境有个bug,秒杀产品还没结束,但是前端显示的是已经结束了,你看一下。我内心OS:妈...

  • 细说setTimeout

    当我最开始接触setTimeout的时候,没觉得这个函数有什么,后来在码代码、面试的过程才慢慢踩中一些坑,然后再去...

  • 踩坑,使用cocoaPods import导入时没有提示的解决办

    续上篇写的,踩坑,cocoaPods ---- framework not found Pods之后 ,又踩坑了。...

  • 前端知识填坑记(三):setTimeout,arguments

    前端知识填坑记(二):call和apply,bind ,new setTimeout 以setTimeout来聊聊...

  • 踩了坑

    这两天踩了坑了,第一次被骗了钱,一千不到,虽不多,还是有点不舒服。 也罢,买个教训,不提了,以后还是要管住嘴,守住...

  • UIWebView的坑(二)

    上周末文章写的 UIWebView的坑,你踩了么 piapia打脸了,UIWebView的坑,我踩了。写好的SDK...

  • D1094:踩坑的价值最大化

    是人就会踩坑,不踩坑理论上就不属于人类,踩坑是人之常情,能回头站在坑边反思,才是对踩过的的坑价值最大化的体现,要不...

  • JavaScrip-StepPitGuide《JavaScrip

    《JavaScript踩坑指南》JavaScrip-StepPitGuide? 《JavaScript踩坑指南》 ...

  • 一文区分call,bind,apply

    前言 我们都知道这三种方法都用于绑定this,但没有区分好,很容易踩坑。继多次踩坑之后我又踩坑了,所以决定再次学习...

  • 算法踩坑6-二叉搜索树排序

    背景 接上面五篇文章算法踩坑-快速排序 算法踩坑2-插入排序 算法踩坑3-堆排序 算法踩坑4-冒泡排序 ...

网友评论

      本文标题:踩了setTimeout的坑

      本文链接:https://www.haomeiwen.com/subject/dxostxtx.html