Einfache Frage hier, auf die ich scheinbar keine Antwort finde: Gibt setTimeout
es eine Möglichkeit zu sehen, ob a nach dem Festlegen noch festgelegt ist?
if (!Timer)
{
Timer = setTimeout(DoThis,60000);
}
Nach allem, was ich Ihnen sagen kann clearTimeout
, bleibt die Variable auf ihrem letzten Wert. A console.log
Ich habe Shows nur Timer
als '12' angesehen, egal ob das Timeout eingestellt oder gelöscht wurde. Muss ich die Variable ebenfalls auf Null setzen oder eine andere Variable als boolesches Sprichwort verwenden: Ja, ich habe diesen Timer eingestellt? Sicher gibt es eine Möglichkeit, einfach zu überprüfen, ob das Timeout noch läuft ... richtig? Ich muss nicht wissen, wie lange noch übrig ist, nur wenn es noch läuft.
quelle
Was ich tue ist:
var timer = null; if (timer != null) { window.clearTimeout(timer); timer = null; } else { timer = window.setTimeout(yourFunction, 0); }
quelle
setTimeout(yourFunction, 0)
, sicherer alssetTimeout('yourFunction()', 0)
.clearTimeout
nicht sicher, dass es keinen Speicher belegt? Prost. (Entschuldigung, ich weiß, dass dies von vor Ewigkeiten ist)timer
behält ihren Wert (eine Timer-ID) auch dann bei, wenn siewindow.clearTimeout
aufgerufen wird. Es ist also notwendig, es zurückzusetzen.Es ist nicht erforderlich, nach einem vorhandenen Timer zu
clearTimeout
suchen. Führen Sie ihn einfach aus, bevor Sie den Timer starten.var timer; //.. var startTimer = function() { clearTimeout(timer); timer = setTimeout(DoThis, 6000); }
Dadurch wird jeder Timer gelöscht, bevor eine neue Instanz gestartet wird.
quelle
Stellen Sie
Timer_Started = true
mit Ihrem Timer eine andere Variable ein . Ändern Sie die Variable auch so,false
dass die Timer-Funktion aufgerufen wird:// 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."); } }
quelle
Ich weiß, dass dies eine Nekropostierung ist, aber ich denke, dass die Leute immer noch danach suchen.
Dies ist, was ich benutze: 3 Variablen:
t
für Millisekunden seit .. im Datumsobjekt für das nächste ZieltimerSys
für das tatsächliche Intervallseconds
Schwellenwert für Millisekunden wurde festgelegtnächste i a haben
function timer
die Funktion überprüft , mit 1 Variable , wenn Variable ist wirklich , wenn ja er prüfen , ob Timer bereits läuft , und wenn dies der Fall ist, als füllt die globalen Variablen , wenn nicht wirklich , falsch , löscht das Intervall und Setglobal var timerSys
zu falsch ;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); }
Beispiel I.
Jetzt können Sie der sys-Funktion eine Zeile hinzufügen :
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 }
Und ausführen:
timer(5000);
Alle 5 Sekunden in der Konsole:
//output:: Next execution: Sun May 08 2016 11:01:05 GMT+0200 (Romance (zomertijd))
Beispiel II
function sys() { t = new Date().setMilliseconds(seconds); console.log("Next execution: " + seconds/1000 + " seconds"); } $(function() { timer(5000); });
Alle 5 Sekunden in der Konsole:
//output:: Next execution: 5 seconds
Beispiel III
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>
Beachten Sie, dass Sie auf diese Weise unter 0 gehen können
quelle
Normalerweise mache ich den Timer ungültig:
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!'); }
quelle