使用setTimeout的jQuery Promise

时间:2012-08-08 17:28:07

标签: javascript jquery promise

我需要一个setInterval在另一个setInterval结束后开始。有没有办法用承诺来做到这一点?

理想情况下,我希望代码看起来像这样:

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

3 个答案:

答案 0 :(得分:0)

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

window.setTimeout(fun_1, 1000);

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

这将在第一次超时完成后开始倒计时。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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