是否有等效的Javascript或Jquery睡眠函数?
我想要javascript中的类似内容是否有等效的Javascript或Jquery睡眠函数?,javascript,jquery,sleep,Javascript,Jquery,Sleep,我想要javascript中的类似内容 for (i = 0; i < 10; i++) { alert(i); // now sleep 1 sec sleep(1000); } (i=0;i2){document.getElementById(“id1”).innerHTML=“代码段”+i+””;} 如果(i==5){document.getElementById(“id1”).innerHTML=“所有代码段已完成运行””;clearInterval(t)
for (i = 0; i < 10; i++) {
alert(i);
// now sleep 1 sec
sleep(1000);
}
(i=0;i<10;i++)的{
警报(一);
//现在睡1秒钟
睡眠(1000);
}
是否有用于此的内置Javascript或Jquery
谢谢大家! 使用
方法没有直接的方法。您必须告诉javascript在一段时间后使用
setTimeout
唤醒“某物”
当然,这是您计划在睡眠后执行的代码
根据我在上找到的一个示例:
但这是脆弱的设计。您最好重新思考您的业务逻辑,以便在一秒钟后真正执行某些操作:调用不同的函数,而不是使用这些人为的辅助变量。第一个问题,为什么要在循环中休眠?如果需要,也许应该建立一个事件系统。我自己也曾多次尝试过多线程javascript编程的睡眠策略,但发现效果不佳。在javascript中执行多线程的最佳方法是使用事件系统,如YUI或几乎任何其他框架提供的事件系统。让您的侦听器订阅此事件,并在事件发生时执行某些操作。在这些事件框架中,您可以完全控制自己的自定义事件何时触发,因此它们没有什么大不了的 这里是YUI事件框架的链接 下面是如何使用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);
}
}
它提供了您所需要的,而且更紧凑
但是,如果您的代码中确实必须有一个sleep函数,那么我建议对一个简单的服务器端脚本进行同步ajax调用。然后,如果愿意,可以使用服务器上的代码进行睡眠。下面是一个问题的链接,该问题向您展示了如何进行同步呼叫
但我强烈建议你走这条路。更干净,如果可以避免的话,您可能不想进行任何服务器端调用。我在javascript sleep/wait上搜索/谷歌搜索了很多网页。。。如果您想让javascript“运行,延迟,运行”,则没有答案。。。大多数人得到的不是“跑,跑(无用的东西),跑”就是“跑,跑+延迟跑” 所以我吃了一些汉堡包,开始思考: 这里有一个有效的解决方案。。。但是你必须切碎你的运行代码 //。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 //例1:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setInterval
var i = 0;
function run() {
//pieces of codes to run
if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i >2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==5){document.getElementById("id1").innerHTML= "<p>all code segment finished running</p>"; clearInterval(t); } //end interval, stops run
i++; //segment of code finished running, next...
}
t=setInterval("run()",1000);
</script>
</body>
</html>
展示
//《therealdealsince1982》中的javascript sleep;版权所有2009
//设定间隔
var i=0;
函数运行(){
//要运行的代码片段
如果(i==0){document.getElementById(“id1”).innerHTML=“代码段”+i+”被运行”;}
如果(i==1){document.getElementById(“id1”).innerHTML=“代码段”+i+”被运行”;}
如果(i==2){document.getElementById(“id1”).innerHTML=“代码段”+i+”被运行”;}
如果运行(i>2){document.getElementById(“id1”).innerHTML=“代码段”+i+””;}
如果(i==5){document.getElementById(“id1”).innerHTML=“所有代码段已完成运行””;clearInterval(t)}//结束间隔,则停止运行
i++;//代码段已完成运行,下一步。。。
}
t=设置间隔(“运行()”,1000);
//"。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//例2:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setTimeout
var i = 0;
function run() {
//pieces of codes to run, can use switch statement
if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(1000);}
if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(2000);}
if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(3000);}
if (i==3){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>";} //stops automatically
i++;
}
function sleep(dur) {t=setTimeout("run()",dur);} //starts flow control again after dur
run(); //starts flow
</script>
</body>
</html>
展示
//《therealdealsince1982》中的javascript sleep;版权所有2009
//设置超时
var i=0;
函数运行(){
//要运行的代码块,可以使用switch语句
如果(i==0){document.getElementById(“id1”).innerHTML=“代码段”+i+”运行了“睡眠(1000);}
如果(i==1){document.getElementById(“id1”).innerHTML=“代码段”+i+”运行了“sleep(2000);}
如果(i==2){document.getElementById(“id1”).innerHTML=“代码段”+i+”运行了“睡眠(3000);}
如果(i==3){document.getElementById(“id1”).innerHTML=“代码段”+i+”运行”;}//将自动停止
i++;
}
函数sleep(dur){t=setTimeout(“run()”,dur);}//在dur之后再次启动流控制
run()//开始流动
功能睡眠(延迟){
var start=new Date().getTime();
while(new Date().getTime()
好吧,如果你在Web服务器上安装了PHP,你可以使用$.load
或类似的方法来调用一个只包含睡眠(int)
的PHP文件…我看到这样的评论:“我已经尝试使用setTimeout,但我不需要继续函数”,我想,是的,你需要。你不需要的是一个循环。您需要一个递归函数
这个
示例:现在使用Typescript更容易实现这一点
function delay(ms: number) {
return new Promise( resolve => setTimeout(resolve, ms));
}
用法(在异步函数中):
示例如下:
只是setTimeout需要一个延续函数作为参数。我尝试过使用setTimeout,但我不需要延续函数。如果您想要类似php的行为,延续是必需的。setTimeout(runThisFunc(),1秒后)-与php不同,js不会等到下一行被执行时才完全完成。发布前我要做的第一件事是,你可以看到有很多解决方案,alreadyNext想知道你为什么需要睡眠,而且不是Zoidberg建议的基于事件的解决方案。我也在用JS进行回调,我学到的一件事是,除了你的
myObj
之外,你的loopFunc将被this
调用。您需要将所需的这个存储在一个闭包中。除此之外,您的基于事件的建议非常有价值!第二个示例应该可以工作,因为loopFunc将在myObj范围内执行。所以这应该指的是myObj,我不喜欢的唯一问题是myObj必须是一个全局可用的变量,才能让setTimeout执行找到它。你能不能进一步解释一下你所说的“结束中的这件事”是什么意思?这就像10年前。。。但是你能演示一下它的用法吗?
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
}
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);
function delay(ms: number) {
return new Promise( resolve => setTimeout(resolve, ms));
}
await delay(1000);