如何暂停javascript代码执行2秒钟

abd*_*ikh 77 javascript

我想停止执行2秒钟.这是这样,但现在遵循一个代码块:

<html>
   <head>
      <title> HW 10.12 </title>
      <script type="text/javascript">
         for (var i = 1; i <= 5; i++) {
             document.write(i);
             sleep(2); //for the first time loop is excute and sleep for 2 seconds        
         };
      </script>
   </head>
   <body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

第一次循环是执行并睡眠2秒.我想停止执行两秒钟?

Kha*_* TO 116

Javascript是单线程的,所以本质上不应该有睡眠功能,因为睡眠会阻塞线程.setTimeout是一种通过将事件发布到队列以便稍后执行而不阻塞线程来解决此问题的方法.但是如果你想要一个真正的睡眠功能,你可以这样写:

function sleep(miliseconds) {
   var currentTime = new Date().getTime();

   while (currentTime + miliseconds >= new Date().getTime()) {
   }
}
Run Code Online (Sandbox Code Playgroud)

注意:建议使用上述代码.

  • @ T.Todua:这就是为什么帖子不推荐它.这只是一个解决方法,以防万一人们想要这样做 (14认同)
  • **不要这样!!!**这会导致整个TAB冻结(也会影响其他标签),因为`while`命令被CPU无限次执行,导致冻结.查看实际示例 - https://jsfiddle.net/mn6yagqx/(自己测试) (12认同)
  • 这对于模拟非常繁忙的Web Worker很有用,因此我可以确认在Worker繁忙时如何对消息进行排队和处理。 (4认同)
  • 例如,为调试摩卡测试引入临时延迟仍然有用。 (3认同)
  • 我想知道有多少人在不看@T.Todua 的评论的情况下已经使用了这段代码 (2认同)

Jam*_*lin 55

暂停执行没有(安全)方式.但是,您可以使用setTimeout执行以下操作:

function writeNext(i)
{
    document.write(i);

    if(i == 5)
        return;

    setTimeout(function()
    {
        writeNext(i + 1);

    }, 2000);
}

writeNext(1);
Run Code Online (Sandbox Code Playgroud)

  • @ManuViswam这不是我的document.write,这是问题的代码. (48认同)
  • 为什么document.write()会搞砸DOM (4认同)

Sac*_*hin 26

你可以setTimeout用来做这件事

function myFunction() {
    // your code to run after the timeout
}

// stop for sometime if needed
setTimeout(myFunction, 5000);
Run Code Online (Sandbox Code Playgroud)


Sam*_*ami 6

此链接可能对您有所帮助。

每次我想要在我的函数中间休眠时,我都会重构以使用 setTimeout()。