JavaScript 在继续之前休眠/等待

IT技术 javascript jquery delay sleep wait
2021-02-01 21:18:49

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

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

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

setTimeout

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

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

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打印在THIS IS之前


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

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

现在,如果你想睡一秒钟,只需使用:

sleep(1000);

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

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

它会冻结浏览器,如果sleep超过 10 秒,浏览器会显示 alert: A script on this page may be busy, or it may have stopped responding. You can stop the script now, open the script in the debugger, or let the script continue.
2021-03-15 21:18:49
这会锁定浏览器,占用大量 CPU,如果暂停时间过长会导致移动设备上的执行中断
2021-03-18 21:18:49
我正在寻找一个用于调试目的的繁忙循环,所以即使这不打算在生产环境中使用,它也正是我正在寻找的。
2021-03-28 21:18:49
你好!这是一个繁忙的等待循环。当然,它不可能是公认的答案。
2021-03-30 21:18:49
setTimeout()涉及回调,这意味着它是异步的。OP 要求暂停的东西,这是同步的,会导致中断。
2021-04-08 21:18:49