2012-08-08 94 views
0

我需要一个setInterval在另一个setInterval结束后开始。有承诺做到这一点的方法吗?jQuery Promise with setTimeout

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

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

你的意思是'setTimeout'? 'setInterval'无休止地调用它的回调,直到调用clearInterval。 – 2012-08-08 17:30:32

+2

'setInterval(callback,n)'将在每“n”毫秒重复提供的'callback'。 – zzzzBov 2012-08-08 17:30:36

+0

https://developer.mozilla.org/en-US/docs/DOM/window.setInterval与https://developer.mozilla.org/zh-CN/docs/DOM/window.setTimeout – 2012-08-08 17:33:02

回答

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

拒绝投票的原因? – Adil 2012-08-08 17:43:08

+0

Downvote不使用承诺界面 – amoebe 2013-06-21 21:48:34

+0

@amoebe你能解释一下吗? – Adil 2013-06-22 03:43:09

0

你的意思,你想第二个区间开始倒计时前一区间完成后?在这种情况下,你会说

window.setTimeout(fun_1, 1000); 

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

这会在第一个超时完成后开始倒计时。

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