Javascript 如何使用JQuery添加延迟?(让其等待5秒后继续)

Javascript 如何使用JQuery添加延迟?(让其等待5秒后继续),javascript,Javascript,具体而言: 我有一个代码需要在5秒后运行 该代码位于函数内部 该函数被已在setTimeout()中的其他函数多次调用 发生的事情是,它第一次运行正常。。。但在接下来的跑步中,它不会等待那5秒 代码如下所示: //==================== create variables: ==================== var x = 0; //==================== create functions: ==================== funct

具体而言:

  • 我有一个代码需要在5秒后运行
  • 该代码位于函数内部
  • 该函数被已在setTimeout()中的其他函数多次调用
发生的事情是,它第一次运行正常。。。但在接下来的跑步中,它不会等待那5秒

代码如下所示:

//==================== create variables: ====================

var x = 0;

//==================== create functions: ====================

function wait5s() {
    setTimeout(function() {
        alert("alert # " + x + "\nNext alert will pop up in 5 seconds now!");
    }, 5000);
    x++;
}

function repeat5times(){
    while (x<5) {
    wait5s()
    }
}


//==================== run this: ====================

alert("Click Ok and Wait 10 seconds for next alert!");
setTimeout(function() {
    repeat5times();
}, 5000);
/============================创建变量:====================
var x=0;
//===============================创建函数:====================
函数wait5s(){
setTimeout(函数(){
警报(“警报”#“+x+”\n下一个警报将在5秒后弹出!”;
}, 5000);
x++;
}
函数重复5次(){

而(x问题在于该代码:

function repeat5times(){
    while (x<5) {
        wait5s()
    }
}
下面是另一个使用
setInterval
的方法:

function repeat5times() {
    var cntr = 0;
    var timer = setInterval(function() {
        console.log("alert # " + x + "\nNext alert will pop up in 5 seconds now!");
        ++cntr;
        if (cntr >= 5) {
            clearInterval(timer);
        }
    }, 5000);
}
下面是一个使用变量设置超时的方法:

function waitNs(sec) {
    setTimeout(function() {
        console.log("alert # " + x + "\nNext alert will pop up in 5 seconds now!");
    }, sec * 1000);
}

function repeat5times() {
    for (var i = 1; i <= 5; i++) {
        waitNs(i * 5);
    }
}
函数等待(秒){
setTimeout(函数(){
log(“警报#“+x+”\n下一个警报将在5秒后弹出!”);
},第1000节);
}
函数重复5次(){

for(var i=1;i
setTimeout
是一个异步函数,它不会阻止wait5s方法调用。 因此,您会一次又一次地将超时设置为5次,这会将警报调用函数放入超时队列中,以便在5秒后立即逐个调用

您需要的是,在调用第一个超时函数后调用next wait5s

function wait5s(callback) {
    setTimeout(function () {

        alert("alert # " + x + "\nNext alert will pop up in 5 seconds now!");

        x++;
        if(callback){
            callback();
        }

    }, 5000);
}

function repeat5times() {

    var callback = function () {
        if (x < 5) {
            wait5s(callback);
        }
    };

    wait5s(callback);
}
函数wait5s(回调){ setTimeout(函数(){ 警报(“警报”#“+x+”\n下一个警报将在5秒后弹出!”; x++; 如果(回调){ 回调(); } }, 5000); } 函数重复5次(){ var callback=函数(){ if(x<5){ wait5s(回调); } }; wait5s(回调); }
如果您同时呼叫5个警报,请尝试此代码

var x = 0;
var t=0;

//==================== create functions: ====================

function wait5s() { 
   t+=5000;
    setTimeout(function() { 
         alert("alert # " + x + "\nNext alert will pop up in 5 seconds now!");
     },t);
   x++;
}

function repeat5times(){ 
while (x<5) { wait5s() } 
}
var x=0;
var t=0;
//===============================创建函数:====================
函数wait5s(){
t+=5000;
setTimeout(函数(){
警报(“警报”#“+x+”\n下一个警报将在5秒后弹出!”;
},t);
x++;
}
函数repeat5times(){

虽然(x您可以尝试此方法,但更简单地说,如果第一次调用应在5秒后执行,则第二次函数调用需要在10秒后执行。同样,第三次调用应在15秒后执行

//==================== create variables: ====================

var x = 1;

//==================== create functions: ====================

function wait5s(myVariable) {
    setTimeout(function() {
        alert("alert # " + x + "\nNext alert will pop up in 5 seconds now!");
    }, myVariable * 5000);

}

function repeat5times(){
    while (x<=5) {
       wait5s(x)
       x++;
    }
}
/============================创建变量:====================
var x=1;
//===============================创建函数:====================
函数wait5s(myVariable){
setTimeout(函数(){
警报(“警报”#“+x+”\n下一个警报将在5秒后弹出!”;
},myVariable*5000);
}
函数重复5次(){

而(x似乎您真的在寻找而不是
setTimeout

 function myAlert() {
     alert('Next alert in 5 secs');
 }

 var si = setInterval(myAlert, 5000)
用于停止计时器

  • 您需要在
    设置超时
    的函数中设置x,以便每5秒触发一次x++

  • 您在x为5之前连续调用
    wait5s()
    ;连续调用它会启动5个setTimeOut函数,这就是为什么5秒后它们会一个接一个地弹出:

    while (x<5) {
       wait5s()
    }
    
    这就是为什么它没有按您预期的方式工作的原因


    一种解决方案是在
    setTimeout
    函数中的if语句中使用
    wait5s();

    谢谢,这就成功了……我仍然了解了它的逻辑,但它工作得很好!)你可以在网上阅读异步javascript编程。回调的使用很好&我回答得很慢,但如果可以的话,我使用
    var repeat5times=setTimeout//…
    似乎(对我来说)优雅的捷径@JosEvora@mikakunsetTimeout返回计时器的句柄,该句柄是一个数字,而不是函数引用。因此,您的代码可能会给出错误。可能您的意思是分配传递给setTimeout的函数引用。不,我的意思是,我错了,我将它与setInterval混淆(使用全局清除间隔)这与jquery无关。它是简单明了的javascript。请从您的问题和标签中删除jquery。jquery很好,但确实如此。我想用jquery实现它……因为我不能用原始js实现……结果证明我的逻辑是错误的!谢谢您的评论(顺便说一句!)谢谢……我解决了这个问题,用if替换while,以摆脱它,并在每次需要它再次运行时调用该函数!;)
    while (x<5) {
       wait5s()
    }
    
       setTimeout(function() { alert("go after 5sec");}, 5000);
       setTimeout(function() { alert("go after 5sec");}, 5000);
       setTimeout(function() { alert("go after 5sec");}, 5000);
       setTimeout(function() { alert("go after 5sec");}, 5000);
       setTimeout(function() { alert("go after 5sec");}, 5000);