2017-07-01 27 views
0

我有麻煩突破了遞歸setTimeout(),我不知道我做錯了什麼。如何擺脫在javaScript中遞歸setTimeouts

timer.start = function() { 
    //do something here 
    recursive(); //call the recursive once to start it up 
    function recursive() { 
    setTimeout1 = setTimeout { 
     function() { 
     //do something 
     recursive();//call recursive after a delay 
     }, delay} 
    } 
} 

一旦「暫停」按鈕被擊中,我將如何停止?

我已經試過這樣:

clearTimeout(setTimeout1); 
<br /> 
setTimeout1 = null; 

這不工作的所有時間。

+0

什麼是_recursiveLoop()_? –

+0

用你提供的例子,它看起來像你試圖重複超時......如果是這樣的話,你看看setInterval? https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval – Reinsbrain

+0

@FrankCadillac這是假設是遞歸();我改變了功能的名稱,但忘了改變它。 –

回答

2

如何爲所有超時維護單個數組?

var setTimeouts = []; 

timer.start = function() { 
    recursive(); 
    function recursive() { 
     setTimeouts.push(setTimeout (function() { recursive(); }, 1000)); 
    } 
} 

當你想停止定時器時調用這個函數。

function clearTimeouts() { 
    for (var i = 0; i < setTimeouts.length; i++) { 
     clearTimeout(setTimeouts[i]); 
    } 
} 
+0

我正在計劃使用這些計時器倒數計時器,所以不會有這麼多setTimeouts無效? –

+0

爲什麼不使用'setInterval()'?例如:'setInterval(function(){//這個代碼每秒運行},1000);' – Junaid