2011-09-06 104 views
4

我有一個Java腳本函數,需要undefined時間才能完成。在一個循環中,我想等待功能完成,然後等待一段確定的時間(例如5000毫秒)並再次調用該函數。我如何在Java腳本中完成此操作?在JavaScript中每隔N秒調用一次異步函數

基本上我想這樣的:

call function and wait until it is finished 
wait another 5000 seconds 
call function and wait until it is finished 
wait another 5000 seconds 
... 

函數本身看起來像這樣:

for every group in list 

    .ajax(delete group items; get group items; add group items) 

我現在的問題是,在環中間的功能不知何故再次調用。

回答

6

作出這樣的遞歸地調用其自身在端部上的計時器的函數:

(function my_func() { 
    // your code 
    setTimeout(my_func, 5000); 
})(); 

這立即調用my_func,然後遞歸地在函數的5秒的延遲後結束調用它。

這樣,定時器纔會開始,直到您的代碼完成。


你可以放置setTimeout()if聲明使遞歸依賴於一些標準:

(function my_func() { 
    // your code 
    if(some_criteria_is_met) { 
     setTimeout(my_func, 5000); 
    } 
})(); 

注意,這意味着你的代碼是同步。如果您正在運行一些異步代碼,就像AJAX請求一樣,該方法會有所不同。

+0

你是對的。我正在使用AJAX請求。我會更新這個問題。 – xsl

+1

這不是*不同 - 讓你的AJAX回調函數調用setTimeout(假設你的.ajax函數在成功完成時具有回調函數)。如果AJAX調用沒有成功完成,你打算做什麼? – RobG

+0

我會忽略不成功的呼叫。實際上,我在函數中有多個AJAX調用,所以如果成功完成,我無法真正執行setTimeout。 – xsl