rip*_*234 37 javascript settimeout
我有一个代码片段,我想至少持续一秒钟.所以我这样做:
var currentTimeMillis = new Date().getTime();
// do stuff...
var sleepTime = 1000 - (new Date().getTime() - currentTimeMillis);
Run Code Online (Sandbox Code Playgroud)
请注意,sleepTime可以是负数.我可不可以做
setTimeout(callback, sleepTime)
Run Code Online (Sandbox Code Playgroud)
或者我必须明确检查负值吗?
Jon*_*ter 49
根据MDN参考,规范要求存在最小超时.
如果你提供的东西少于这个(HTML5规范说4ms),那么浏览器将忽略你的延迟并使用最小值.
所以否定应该没问题,因为它只会低于最低限度.
显然,情况并非总是如此(并不总是与Web开发一样!).根据(http://programming.aiham.net/tag/browser-compatibility/):
提供setTimeout为负时间并不总是会导致调用回调函数.这适用于其他浏览器,但在Internet Explorer(8或更低版本)中,您必须确保任何负面时间都更改为零.
我自己没有测试过,但是像托马斯说的那样,安全起来可能更好.
Tom*_*icz 42
最好是安全而不是抱歉:
setTimeout(callback, Math.max(sleepTime, 0))
Run Code Online (Sandbox Code Playgroud)