我有一个JavaScript代码,需要在其中添加睡眠/等待功能。我正在运行的代码已经在一个函数中,例如:

function myFunction(time)
{
    alert('time starts now');
    //code to make the program wait before continuing
    alert('time is up')
}


我听说可能的解决方案可能包括

setTimeout


,但是我不确定在这种情况下如何使用它。

我不能使用PHP,因为我的服务器不支持PHP,尽管使用jQuery可以。

评论

该代码将为setTimeout(function(){alert('time up up')},time); (而不是\`行和其下方的alert`行),时间以毫秒为单位给出developer.mozilla.org/en-US/docs/Web/API/window.setTimeout

出于什么原因,您必须让脚本等待?

谢谢大家。是否可以使函数sleepNow(time)可以在脚本中调用,例如sleepNow(5000)以使睡眠5秒钟?

函数sleep(_ms = 0){var _start = new Date()。getTime(); while(_ms>(new Date()。getTime()-_start)){}}

我想重新提出这个问题。因为在这里我们可以提供仅与浏览器相关的答案,

#1 楼

JS没有睡眠功能,它具有setTimeout()或setInterval()函数。
如果您可以将暂停后需要运行的代码移动到setTimeout()回调中,则可以执行以下操作:
//code before the pause
setTimeout(function(){
    //do what you need here
}, 2000);

在此处查看示例:http://jsfiddle.net/9LZQp/
这不会停止脚本的执行,但是由于setTimeout()是异步函数,因此代码
console.log("HELLO");
setTimeout(function(){
    console.log("THIS IS");
}, 2000);
console.log("DOG");

将在控制台中打印此代码:
HELLO
DOG
THIS IS

(请注意,DOG是在此之前打印的)

您可以使用以下代码要模拟短时间的睡眠:
现在,如果要睡眠1秒钟,只需使用:
例如:http:// jsfiddle。 net / HrJku / 1 /
请注意,此代码将使您的脚本忙n毫秒。这不仅会停止页面上Javascript的执行,而且取决于浏览器的实现,可能会使页面完全无响应,并可能使整个浏览器无响应。换句话说,这几乎总是错误的做法。

评论


它会冻结浏览器,如果您睡眠超过10秒钟,浏览器会显示警报:此页面上的脚本可能很忙,或者可能已停止响应。您可以立即停止脚本,在调试器中打开脚本,或者继续执行脚本。

– Ikrom
2013年6月1日15:55

你好!这是一个繁忙的等待循环。当然,它不能成为公认的答案。

–老盖泽
13年11月19日在1:41

如果暂停时间过长,则会锁定浏览器,占用大量CPU,导致移动设备上的执行中断

–保罗
2014年1月26日上午11:24

setTimeout()涉及回调,这意味着它是异步的。 OP要求停止某些事情,这是同步的并且会导致中断。

– Ilan Biala
2014年4月4日22:51

我一直在寻找用于调试目的的繁忙循环,因此即使不打算在生产环境中使用它,这也正是我想要的。

–流感
2015年4月1日在9:47