Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有等效的Javascript或Jquery睡眠函数?_Javascript_Jquery_Sleep - Fatal编程技术网

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

是否有等效的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)

我想要javascript中的类似内容

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);