【问题标题】:jQuery Promise with setTimeout带有 setTimeout 的 jQuery 承诺
【发布时间】:2012-08-09 01:47:31
【问题描述】:

我需要一个 setInterval 在另一个 setInterval 结束后开始。有没有办法通过 Promise 做到这一点?

理想情况下,我希望代码如下所示:

for (i=0; i<5; i++){
  setInterval(fun_1, 1000)
  //wait until this is done
}

【问题讨论】:

标签: javascript jquery promise


【解决方案1】:

setInterval 在给定的时间间隔后调用提供的函数,直到您 clear 它的对象。 So you do not need a loop for this。您可以use a counter 在计数器达到所需值后终止它。

Live Demo.

var myInter;
i = 1;
function fun_1()
{
   // some code
   if(i++==5)
      clearInterval(myInter);
}    

myInter = setInterval(fun_1, 1000);

【讨论】:

  • @amoebe 你能解释一下吗?
  • 标题写着“jQuery Promise”,但没有使用其中的一个函数:api.jquery.com/category/deferred-object 虽然这个问题也很奇怪。
  • 不是我给问题的标题。
【解决方案2】:

您的意思是您希望第二个间隔在前一个间隔结束后开始倒计时吗?在这种情况下,你会说

window.setTimeout(fun_1, 1000);

function fun_1
{
    window.setTimeout(fun_2, 1000);
}

这会在第一次超时完成后开始第二次超时的倒计时。

【讨论】:

    【解决方案3】:

    您应该在第一个间隔完成后调用下一个间隔

    var cnt = 0;
    function executeNextStep(){
        fun_1();
        if (cnt<5) {
            window.setTimeout(executeNextStep,1000);
        }
        cnt++;
    }
    executeNextStep();  //execute this right away
    //window.setTimeout(executeNextStep,1000); use this if you want it to be delayed
    

    如果你需要执行不同的功能:

    function fun_1() {
        console.log(1);
    }
    function fun_2() {
        console.log(2);
    }
    function fun_3() {
        console.log(3);
    }
    
    var fnc_stack = [fun_1, fun_2, fun_3];
    var cnt = 0;
    function executeNextStep(){
        fnc_stack[cnt]();
        cnt++;
        if (cnt<fnc_stack.length) {        
            window.setTimeout(executeNextStep,1000);
        }
    }
    executeNextStep();
    

    【讨论】:

      猜你喜欢
      • 2020-07-20
      • 2017-10-04
      • 1970-01-01
      • 2020-02-07
      • 2016-12-09
      • 2016-04-21
      相关资源
      最近更新 更多