2012-08-08 87 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();