2017-09-19 75 views
0

我注意到setInterval()函數在間隔開始時實際運行(如in,取值),然後等待並返回結果間隔。 如果這些值在中間間隔時改變,它仍然會按照它在開始時的那樣執行。這在我的滑塊中導致不需要的行爲。 有沒有辦法強制setInterval()在兩個時間間隔的最後?最好不用jQuery。避免在間隔開始時執行setInterval()

編輯:雖然我將我的代碼轉換到這裏發佈後,該問題自行解決。原來,這與我的問題無關。對不起,我一定會在下次發帖。謝謝你的答案! :)希望他們能在未來幫助別人,因爲無論如何我都找不到這樣的問題。

+1

我想我明白你的意思,但你應該展示一些代碼,以便我們幫助你。 –

+0

到目前爲止您嘗試過什麼? :) –

回答

0

是的。遞歸地使用setTimeout,這通常是更好的主意。

function doSomething() { 
 
    setTimeout(function() { 
 
    console.log('something') 
 
    doSomething() 
 
    }, 2000) 
 
} 
 

 
console.log('start') 
 
doSomething()

0

您應該發佈一些你的代碼。我不能完全肯定,如果這是你的問題,但如果你看看這個:setInterval的內部定義

setInterval(() => { 
    var message = 'ok'; 
    console.log(message); 
}, 1000); 

message = 'not ok'; 

「消息」變量的作用域是函數傳遞到setInterval的。所以當我試圖改變該範圍之外的變量時,它將不起作用。我實際上意外地在窗口對象上創建了一個新變量。

但是,如果我這樣做:

var message = 'ok'; 

setInterval(() => { 
    console.log(message); 
}, 1000); 

message = 'not ok'; 

「消息」變量被成功地改變和setInterval會打電話與該改變的變量。

0

您可以在window對象上綁定所需的變量。

window.myVariable = 'Important String'; 

setInterval(function() { 
    doSomethingWith(window.myVariable); 
}, 2000); 

// Variable is changed 
window.myVariable = 'Less Important String';