javascript - 如果我要sleep(JavaScript的版本) 我该怎么做?

  显示原文与译文双语对照的内容

比下面的pausecomp 函数在java脚本中是否有更好的方式来工程师一个 sleep


function pausecomp(millis)
 {
 var date = new Date();
 var curDate = null;
 do { curDate = new Date(); }
 while(curDate-date <millis);
}

这不是一个重复中睡眠的Javascript ;我想要个真正的函数中间,而不是一个延迟的一段代码执行前睡觉。

时间:

我同意其他的海报,一个繁忙的睡眠只是一个不好的主意。

但是,setTimeout不暂停执行,它在超时之后立即执行函数的下一行,而不是在超时之后执行,这样就不会完成睡眠的相同任务。

这样做的方法是把你的功能分解到之前和之后。


function doStuff()
{
//do some things
 setTimeout(continueExecution, 10000)//wait ten seconds before continuing
}

function continueExecution()
{
//finish doing things after the pause
}

请确定你的函数名称仍然准确地描述了每个部分正在做什么( 例如 。 GatherInputThenWait和 CheckInput,而不是funcPart1和 funcPart2

编辑

算法相对不会执行的代码行,你决定直到你的目的要执行超时,时间仍在返回控制权返回到客户端的电脑不论是其他的什么已经排队等待打印。

进一步编辑

就像评论中指出的,这绝对不能在循环中工作。 你可以做一些漂亮的( ugly ) 攻击来使它在一个循环中工作,但通常这只会造成灾难性的spaghetti代码。

我知道这有点旧的问题,但是如果( 我像我) 使用的是 Rhino,你可以使用- 。


try
{
 java.lang.Thread.sleep(timeInMilliseconds);
}
catch (e)
{
/*
 * This will happen if the sleep is woken up - you might want to check
 * if enough time has passed and sleep again if not - depending on how
 * important the sleep time is to you.
 */
}

如果你正在使用 jQuery,有人实际上创建了一个"延迟"于settimeout,相关插件,它只不过是一个 wrapper:


//Delay Plugin for jQuery
//- http://www.evanbot.com
//- © 2008 Evan Byrne

jQuery.fn.delay = function(time,func){
 this.each(function(){
 setTimeout(func,time);
 });

 return this;
};

然后,你就可以按照预期的方式在一行函数调用中使用它:


$('#warning')
.addClass('highlight')
.delay(1000)
.removeClass('highlight');

仅对于调试/dev,如果对某人有用,我将它的发布

有趣的东西,在 Firebug ( &可能其他的js控制台) 中,点击进入后没有什么发生,只在指定的睡眠持续时间之后( - - )


function sleepFor( sleepDuration ){
 var now = new Date().getTime();
 while(new Date().getTime() <now + sleepDuration){/* do nothing */} 
}

使用示例:


function sleepThenAct(){ sleepFor(2000); console.log("hello js sleep!"); }

在这里,就像代码所示,不要是一个坏的开发,在网站上使用它。 这是一个开发工具函数。


//Basic sleep function based on ms.
//DO NOT USE ON PUBLIC FACING WEBSITES.
function sleep(ms) {
 var unixtime_ms = new Date().getTime();
 while(new Date().getTime() <unixtime_ms + ms) {}
}

首先:

定义要执行的函数:


function alertWorld(){
 alert("Hello World");
}

然后使用setTimeout方法调度它的执行:


setTimeout(alertWorld,1000)

注意两件事

  • 第二个参数是毫秒的时间
  • 作为第一个参数,你必须只传递函数的名称( 引用),不带括号
...