我想連續調用JavaScript中的函數,例如每5秒鐘直到取消事件。 我試圖用setTimeout和調用它在我的功能遞歸setTimeout調用神祕地停止運行
function init()
{ setTimeout(init, 5000);
// do sthg
}
我的問題是,像2分鐘後,電話將停止,我的計劃是一點點長像5分鐘。
只要我想,我怎樣才能繼續調用我的功能。
在此先感謝
我想連續調用JavaScript中的函數,例如每5秒鐘直到取消事件。 我試圖用setTimeout和調用它在我的功能遞歸setTimeout調用神祕地停止運行
function init()
{ setTimeout(init, 5000);
// do sthg
}
我的問題是,像2分鐘後,電話將停止,我的計劃是一點點長像5分鐘。
只要我想,我怎樣才能繼續調用我的功能。
在此先感謝
只有你所描述的行爲可能的解釋是:
作爲另一個海報在你的代碼的// do sthg
部分提到,init
以某種方式覆蓋掉在執行本身的過程中,
頁面正在重新加載。
//do sthg
代碼正在進入某種錯誤狀態,這看起來好像沒有執行。
爲了保證init
沒有被修改,嘗試傳遞// do sthg
一部分,我們稱之爲callback
功能:
function startLoop(callback, ms) {
(function loop() {
if (cancel) return;
setTimeout(loop, ms);
callback();
}());
}
其他海報使用setInterval
建議。這很好,但有
沒有什麼根本上錯誤設置重複操作使用setTimeout
與函數本身發出下一個setTimeout
你正在做的事情。這是建立重複操作的常用的,公認的選擇。除其他優點之外,它允許隨後的超時根據其行爲(尤其是超時間隔)進行調整,如果這是個問題。如果使用重寫代碼(因爲它可能應該是這樣),那麼除了在回調內發出下一個請求外,沒有其他選擇,因爲沒有setInterval
模擬。
調用該函數setInterval
。
var interval = setInterval(init, 5000);
// to cancel
clearInterval(interval);
這並不回答OP爲什麼他當前的代碼不起作用的問題。 – 2015-05-04 13:39:57
爲什麼你不能使用'setInterval'? –
爲什麼會停止工作沒有明顯的原因。我能想到的唯一原因是,如果你爲'init'標識符指定了一些不同的東西,那麼函數就不能再被調用了。 – Guffa
有沒有可能發生重新加載頁面的事情? – 2015-05-04 13:44:26