【问题标题】:JavaScript sleep/wait before continuing [duplicate]JavaScript在继续之前睡眠/等待[重复]
【发布时间】:2013-05-28 05:19:15
【问题描述】:

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

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

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

setTimeout

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

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

【问题讨论】:

  • 代码是setTimeout(function(){ alert('time is up')},time);(而不是下面的\` line and the alert`行),时间以毫秒为单位developer.mozilla.org/en-US/docs/Web/API/window.setTimeout
  • 出于什么原因你必须让你的脚本等待?
  • 谢谢大家。是否可以创建一个函数 sleepNow(time),您可以在脚本中调用它,例如 sleepNow(5000) 休眠 5 秒?
  • 函数睡眠(_ms = 0){ var _start = new Date().getTime(); while(_ms > (new Date().getTime() - _start)){} }
  • 我想重新提出这个问题。因为在这里我们可以给出仅与浏览器相关的答案,

标签: javascript jquery delay sleep wait


【解决方案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

(注意 DOGTHIS IS 之前打印)


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

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

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

sleep(1000);

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

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

【讨论】:

  • 它会冻结浏览器,并且如果您执行sleep 超过10 秒,浏览器会显示警报: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.
  • 您好!这是一个繁忙的等待循环。这肯定不是公认的答案。
  • 这会锁定浏览器,占用 CPU 资源,如果暂停时间过长会导致移动设备上的执行中断
  • setTimeout() 涉及回调,这意味着它是异步的。 OP 要求停止的东西,这是同步的,会导致中断。
  • 我一直在寻找一个繁忙的循环来进行调试,所以即使它不打算在生产环境中使用,它也正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多