关于jquery:JavaScript睡眠/等待继续之前

JavaScript sleep/wait before continuing

本问题已经有最佳答案,请猛点这里访问。

我有一个javascript代码需要添加一个sleep/wait函数。我正在运行的代码已经在函数中,例如:

1
2
3
4
5
6
function myFunction(time)
{
    alert('time starts now');
    //code to make the program wait before continuing
    alert('time is up')
}

我听说可能的解决办法包括

1
setTimeout

但我不知道如何在这种情况下使用它。

我不能使用PHP,因为我的服务器不支持它,尽管使用jquery会很好。


JS没有sleep函数,它有setTimeout()或setInterval()函数。

如果可以将暂停后需要运行的代码移到setTimeout()回调中,则可以执行如下操作:

1
2
3
4
//code before the pause
setTimeout(function(){
    //do what you need here
}, 2000);

请参阅以下示例:http://jsfiddle.net/9lzqp/

这不会停止脚本的执行,但是只要setTimeout()是一个异步函数,这个代码

1
2
3
4
5
console.log("HELLO");
setTimeout(function(){
    console.log("THIS IS");
}, 2000);
console.log("DOG");

将在控制台中打印:

1
2
3
HELLO
DOG
THIS IS

(请注意,在此之前已打印狗)

可以使用以下代码模拟短时间睡眠:

1
2
3
4
5
6
7
8
function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

现在,如果您想睡眠1秒钟,只需使用:

1
sleep(1000);

示例:http://jsfiddle.net/hrjku/1/

请注意,此代码将使脚本保持N毫秒的繁忙状态。这不仅会停止页面上的javascript执行,而且根据浏览器的实现,可能会使页面完全无响应,并可能使整个浏览器无响应。换句话说,这几乎总是错误的。