我是一個第三方JavaScript開發和我的一個客戶都有自己的網頁,在下列代碼被反覆運行:如何防止clearInterval斷裂的setTimeout
for (var i = 1; i < 99999; i++) {
window.clearInterval(i);
}
當然,這打破了我的setInterval
環。我想我會解決這個問題,只需使用setTimeout
,如果還沒有滿足一些條件,則會創建另一個setTimeout
。令我驚訝的是,clearInterval
以上的代碼也打破我的超時。
您可以觀察這種行爲,甚至沒有建立一個setTimeout
循環,但只是一個孤立的定時器(我把它包在一些額外的代碼,以保持它關閉窗口):
var example = (function(){
return {
foo: setTimeout(function(){
console.log('bar');
}, 5000)
};
}());
for (var i = 1; i < 99999; i++) {
window.clearInterval(i);
}
我能想到的唯一的事情如果覆蓋內置的clearInterval來清除我的計時器,但是這對我來說似乎非常非常錯誤和骯髒。
var originalClearInterval = window.clearInterval;
var exampleLoop = setInterval(function() {
console.log('loop running');
if(typeof window.stopRunning !== 'undefined' && window.stopRunning === true) {
window.clearInterval = originalClearInterval;
clearInterval(exampleLoop);
console.log('loop finished');
}
}, 50);
window.clearInterval = function(timerId) {
if(timerId !== exampleLoop) {
originalClearInterval.apply(this, arguments);
}
}
這基本上是/ API/WindowTimers/clearInterval)完全錯誤的方式 – Rhumborl
將你的間隔設置爲一個變量,所以你可以'clearInterval(intervalID)'而不是清除所有的東西。 –
@Rhumborl - 正確。 –