【发布时间】:2010-11-11 14:17:28
【问题描述】:
JavaScript 中有睡眠功能吗?
【问题讨论】:
-
现代的做法是简单地使用
await sleep(<duration>)。
标签: javascript
JavaScript 中有睡眠功能吗?
【问题讨论】:
await sleep(<duration>)。
标签: javascript
一种简单的、占用大量 CPU 的方法来阻止执行数毫秒:
/**
* Delay for a number of milliseconds
*/
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
}
【讨论】:
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
}
此代码在指定的持续时间内阻塞。这是占用 CPU 的代码。这与线程阻塞自身并释放 CPU 周期以供另一个线程使用不同。这里没有发生这样的事情。不要使用此代码,这是一个非常糟糕的主意。
【讨论】:
如果您希望通过调用sleep 来阻止代码的执行,那么不,JavaScript 中没有这样的方法。
JavaScript 确实有 setTimeout 方法。 setTimeout 会让你延迟执行一个函数 x 毫秒。
setTimeout(myFunction, 3000);
// if you have defined a function named myFunction
// it will run after 3 seconds (3000 milliseconds)
请记住,这与 sleep 方法(如果存在)的行为方式完全不同。
function test1()
{
// let's say JavaScript did have a sleep function..
// sleep for 3 seconds
sleep(3000);
alert('hi');
}
如果您运行上述函数,则必须等待 3 秒(sleep 方法调用被阻塞)才能看到警报“hi”。不幸的是,sleep 中没有类似 JavaScript 的函数。
function test2()
{
// defer the execution of anonymous function for
// 3 seconds and go to next line of code.
setTimeout(function(){
alert('hello');
}, 3000);
alert('hi');
}
如果您运行 test2,您将立即看到“hi”(setTimeout 是非阻塞的),3 秒后您将看到警报“hello”。
【讨论】:
await sleep(3000)。
您可以使用setTimeout 或setInterval 函数。
【讨论】:
await 与setTimeout() 的承诺:masteringjs.io/tutorials/fundamentals/sleep