2015-05-04 78 views
0

我想連續調用JavaScript中的函數,例如每5秒鐘直到取消事件。 我試圖用setTimeout和調用它在我的功能遞歸setTimeout調用神祕地停止運行

function init() 
    { setTimeout(init, 5000); 

    // do sthg 
    } 

我的問題是,像2分鐘後,電話將停止,我的計劃是一點點長像5分鐘。

只要我想,我怎樣才能繼續調用我的功能。

在此先感謝

+0

爲什麼你不能使用'setInterval'? –

+2

爲什麼會停止工作沒有明顯的原因。我能想到的唯一原因是,如果你爲'init'標識符指定了一些不同的東西,那麼函數就不能再被調用了。 – Guffa

+0

有沒有可能發生重新加載頁面的事情? – 2015-05-04 13:44:26

回答

0

只有你所描述的行爲可能的解釋是:

  1. 作爲另一個海報在你的代碼的// do sthg部分提到,init以某種方式覆蓋掉在執行本身的過程中,

  2. 頁面正在重新加載。

  3. //do sthg代碼正在進入某種錯誤狀態,這看起來好像沒有執行。

爲了保證init沒有被修改,嘗試傳遞// do sthg一部分,我們稱之爲callback功能:

function startLoop(callback, ms) { 
    (function loop() { 
     if (cancel) return; 
     setTimeout(loop, ms); 
     callback(); 
    }()); 
} 

其他海報使用setInterval建議。這很好,但有
沒有什麼根本上錯誤設置重複操作使用setTimeout與函數本身發出下一個setTimeout你正在做的事情。這是建立重複操作的常用的,公認的選擇。除其他優點之外,它允許隨後的超時根據其行爲(尤其是超時間隔)進行調整,如果這是個問題。如果使用​​重寫代碼(因爲它可能應該是這樣),那麼除了在回調內發出下一個請求外,沒有其他選擇,因爲​​沒有setInterval模擬。

0

調用該函數setInterval

var interval = setInterval(init, 5000); 

// to cancel 
clearInterval(interval); 
+1

這並不回答OP爲什麼他當前的代碼不起作用的問題。 – 2015-05-04 13:39:57