我可以看到一个计时器是否仍在运行?

这里简单的问题,我似乎无法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:

  1. t为毫秒,因为..在下一个目标的Date对象中
  2. timerSys为实际的时间间隔
  3. 已经设置了几毫秒的阈值

接下来我有一个function timer 1variables函数检查variables是否真的 ,如果是的话,他检查定时器是否已经运行,如果是这样的情况比填充全局variables ,如果不是真的错误地清除间隔和设置global var timerSysfalse ;

 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); } 

这将在启动新实例之前清除任何计时器。