有没有比下面的 sleep
函数( 取自这里)更好的在 JavaScript 中设计 pausecomp
的方法?
function pausecomp(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}
这不是 JavaScript 中 Sleep 的重复 - 动作之间的延迟;我想要在函数中间 _真正的睡眠_,而不是在一段代码执行之前的延迟。
原文由 fmsf 发布,翻译遵循 CC BY-SA 4.0 许可协议
2017 - 2021 更新
自 2009 年提出这个问题以来,JavaScript 发生了重大变化。所有其他答案现在都已过时或过于复杂。这是当前的最佳实践:
或作为单行:
或者
将其用作:
演示:
注意,
await
只能在以async
关键字为前缀的函数中执行,或者在 越来越多的环境 中在脚本的顶层执行。await
仅暂停当前的async
功能。这意味着它不会阻止脚本其余部分的执行,这在绝大多数情况下都是您想要的。如果您确实需要阻塞构造,请使用Atomics
.wait
查看 此答案,但请注意,大多数浏览器不允许在浏览器的主线程上使用它。两个新的 JavaScript 特性(截至 2017 年)帮助编写了这个“睡眠”函数:
Promises,ES2015(又名 ES6)的原生特性。我们还在 sleep 函数的定义中使用了 箭头 函数。
async/await
特性让代码显式地等待承诺解决(解决或拒绝)。兼容性
Promise 在 Node v0.12+ 中得到支持,并且 在浏览器中得到广泛支持,除了 IE
async
/await
登陆 V8 并且 自 Chrome 55(2016 年 12 月发布)起默认启用它 于 2016 年 10 月登陆 Node 7
并 于 2016 年 11 月登陆 Firefox Nightly
如果由于某种原因您使用的 Node 早于 7( 2017 年达到了生命周期),或者针对的是旧浏览器,仍然可以通过 Babel 使用
async
/await
(一种将 JavaScript + 新功能转换为普通旧功能的工具JavaScript),带有transform-async-to-generator
插件。