是否有等效的Javascript或Jquery睡眠function?

我想在javascript中使用这样的东西。

for (i = 0; i < 10; i++) { alert(i); // now sleep 1 sec sleep(1000); } 

是否内置了Javascript或Jquery?

谢谢!

直接没有这样的事情。 你必须告诉javascript使用setTimeout在一段时间后唤醒’某事’。

当然,这个’某事’就是你计划在睡眠执行的代码。

从我在互联网上找到的一个例子:

 function dothingswithsleep( part ) { if( part == 0 ) { alert( "before sleep" ); setTimeout( function() { dothingswithsleep( 1 ); }, 1000 ); } else if( part == 1 ) { alert( "after sleep" ); } } 

但那是脆弱的设计。 您最好重新考虑您的业务逻辑,以便在一秒钟后真正做一些事情 :调用不同的函数而不是使用这些设计的辅助变量。

使用

的setTimeout

方法

第一个问题,为什么你想在一个循环内睡觉? 如果需要,可能应该建立一个事件系统。 我本人已多次尝试睡眠策略进行multithreadingjavascript编程,发现它不能正常工作。 在javascript中执行multithreading的最佳方法是使用YUI或几乎任何其他框架提供的事件系统。 让您的听众订阅此事件并在发生时执行某些操作。 在这些事件框架中,您可以完全控制自己的自定义事件何时触发,因此它们没什么大不了的。

这是YUI事件框架的链接。

http://developer.yahoo.com/yui/examples/event/index.html

以下是使用YUI编码的方法

 var myEvent = new YAHOO.util.CustomEvent('fooEvent'); // subscribe a function to be called (first param) inside the scope of an object // (second param). myEvent.subscribe(function() {alert(this.count++);},{count:0},true); setTimeout('myEvent.fire()',1000); 

这样做的方式更清洁,更紧凑。 或者,如果您不想使用事件框架,请尝试此操作

 var myObj = { count:0, doSomething:function(){alert(this.count++);} loopFunc:function(){ this.doSomething(); setTimeout('myObj.loopFunc()',1000); } } 

这提供了您所需要的,更紧凑。

但是,如果您的代码中确实必须具有睡眠function,那么我建议对简单的服务器端脚本进行同步ajax调用。 然后,如果您愿意,可以使用服务器上的代码进行hibernate。 以下是此处发布的问题的链接,其中显示了如何进行同步通话。

如何让jQuery执行同步而非异步的Ajax请求?

但我强烈建议你去setTimeout方式。 更清洁,如果你可以避免它,你可能不想做任何服务器端调用。

我已经在javascript sleep / wait上搜索/搜索了不少网页……如果你想让javascript“运行,延迟,运行”,没有答案……大多数人得到的也是“RUN,RUN(无用)东西),运行“或”运行,运行+延迟运行“….

所以我吃了一些汉堡并且开始思考::这里有一个有效的解决方案……但你必须砍掉你的运行代码… :::

// ………………………………….. // example1:

   
DISPLAY

// ……………………………… // example2:

   
DISPLAY

我看到这个评论“我尝试过使用setTimeout,但我不需要延续function”并且想,是的,你做到了。 你不需要的是一个循环。 你需要一个递归函数。

这个

 for (i = 0; i < 10; i++) { alert(i); // now sleep 1 sec sleep(1000); } 

翻译成这个

 function recursive( i, max ) { if ( i > max ) return; alert( i ); i = i + 1; setTimeout( function(){ recursive(i, max); }, 1000 ); } recursive(1, 10); 

示例: http : //jsfiddle.net/q76Qa/

好吧,如果你在网络服务器上安装了PHP,你可以使用$.load或类似的方法调用一个只有sleep(int)的PHP文件…

 function sleep(delay) { var start = new Date().getTime(); while (new Date().getTime() < start + delay); }