JavaScript在继续之前睡眠/等待[重复]

Posted

技术标签:

【中文标题】JavaScript在继续之前睡眠/等待[重复]【英文标题】:JavaScript sleep/wait before continuing [duplicate] 【发布时间】: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)) 我想重新提出这个问题。因为在这里我们可以给出仅与浏览器相关的答案, 【参考方案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 要求停止的东西,这是同步的,会导致中断。 我一直在寻找一个繁忙的循环来进行调试,所以即使它不打算在生产环境中使用,它也正是我想要的。

以上是关于JavaScript在继续之前睡眠/等待[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:在循环继续之前等待函数结束[重复]

有睡眠/等待吗?

JavaScript 中是不是有睡眠/暂停/等待功能? [复制]

JavaScript异步/等待:等待后代码不会继续[重复]

Excel Power Query - 睡眠或等待命令等待 API 速率限制

JavaScript(异步)如何确定在继续之前要“等待”啥?