我可以看到一个计时器是否仍在运行?
这里简单的问题,我似乎无法find答案:一旦setTimeout
设置,有没有办法看看它是否仍然,以及设置?
if (!Timer) { Timer = setTimeout(DoThis,60000); }
从我所知道的,当你clearTimeout
,variables保持在最后的值。 我只是看了一个console.log
显示Timer
为'12',无论超时设置或清除。 我是否还需要清空variables,或者使用其他variables作为布尔语,是的,我已经设置了这个计时器? 当然有一种方法来检查是否超时仍在运行…对不对? 我不需要知道剩下多less时间,只要它还在运行。
除了启动或停止定时器之外,还没有任何与定时器交互的信息。 我通常在超时处理程序中将计时器variables置为空,而不是使用标志来指示计时器未运行。 关于W3School关于计时器如何工作有一个很好的描述。 在他们的例子中他们使用一个标志variables。
您看到的值是当前计时器的句柄 ,当您清除(停止)时使用该计时器。
我所做的是:
var timer = null; if (timer != null) { window.clearTimeout(timer); timer = null; } else { timer = window.setTimeout(yourFunction, 0); }
用你的定时器设置另一个variablesTimer_Started = true
。 在调用定时器函数时也将该variables更改为false
:
// set 'Timer_Started' when you setTimeout var Timer_Started = true; var Timer = setTimeout(DoThis,60000); function DoThis(){ // function DoThis actions //note that timer is done. Timer_Started = false; } function Check_If_My_Timer_Is_Done(){ if(Timer_Started){ alert("The timer must still be running."); }else{ alert("The timer is DONE."); } }
我知道这是一个necroposting,但我认为人们仍然在寻找这个。
这是我使用的:3variables:
-
t
为毫秒,因为..在下一个目标的Date对象中 -
timerSys
为实际的时间间隔 - 已经设置了几毫秒的阈值
接下来我有一个function timer
1variables函数检查variables是否真的 ,如果是的话,他检查定时器是否已经运行,如果是这样的情况比填充全局variables ,如果不是真的 , 错误地清除间隔和设置global var timerSys
为false ;
var t, timerSys, seconds; function timer(s) { if (s && typeof s === "number") { if (typeof timerSys === "boolean" || typeof timerSys === "undefined") { timerSys = setInterval(function() { sys(); }, s); t = new Date().setMilliseconds(s); seconds = s; } } else { clearInterval(timerSys); timerSys = false; } return ((!timerSys) ? "0" : t) } function sys() { t = new Date().setMilliseconds(seconds); }
例子一
现在你可以添加一行到sys函数 :
function sys() { t = new Date().setMilliseconds(seconds); console.log("Next execution: " + new Date(t)); //this is also the place where you put functions & code needed to happen when interval is triggerd }
并执行:
timer(5000);
在控制台中每隔5秒钟:
//output:: Next execution: Sun May 08 2016 11:01:05 GMT+0200 (Romance (zomertijd))
例二
function sys() { t = new Date().setMilliseconds(seconds); console.log("Next execution: " + seconds/1000 + " seconds"); } $(function() { timer(5000); });
在控制台中每隔5秒钟:
//output:: Next execution: 5 seconds
例三
var t, timerSys, seconds; function timer(s) { if (s && typeof s === "number") { if (typeof timerSys === "boolean" || typeof timerSys === "undefined") { timerSys = setInterval(function() { sys(); }, s); t = new Date().setMilliseconds(s); seconds = s; } } else { clearInterval(timerSys); timerSys = false; } return ((!timerSys) ? "0" : t) } function sys() { t = new Date().setMilliseconds(seconds); console.log("Next execution: " + seconds / 1000 + " seconds"); } $(function() { timer(5000); $("button").on("click", function() { $("span").text(t - new Date()); }) });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button>Freebeer</button> <span></span>
我通常无效的计时器:
var alarm = setTimeout(wakeUpOneHourLater, 3600000); function wakeUpOneHourLater() { alarm = null; //stop alarm after sleeping for exactly one hour } //... if (!alarm) { console.log('Oops, waked up too early...Zzz...'); } else { console.log('Slept for at least one hour!'); }
无需检查现有的计时器,只需clearTimout启动计时器之前。
var timer; var startTimer = function() { clearTimout(timer); timer = setTimeout(DoThis, 6000); }
这将在启动新实例之前清除任何计时器。