Question simple ici pour laquelle je n'arrive pas à trouver de réponse: Une fois qu'un setTimeout
est défini, y a-t-il un moyen de voir s'il est toujours, eh bien, défini?
if (!Timer)
{
Timer = setTimeout(DoThis,60000);
}
D'après ce que je peux dire, lorsque vous clearTimeout
, la variable reste à sa dernière valeur. UNE console.log
Je viens de regarder les émissions Timer
comme étant '12', peu importe si le délai a été défini ou effacé. Dois-je également annuler la variable ou utiliser une autre variable en tant que dicton booléen, oui, j'ai réglé ce minuteur? Il y a sûrement un moyen de vérifier simplement si le délai d'expiration est toujours en cours ... non? Je n'ai pas besoin de savoir combien de temps il reste, juste s'il fonctionne toujours.
Il n'y a aucune façon d'interagir avec la minuterie, sauf pour la démarrer ou l'arrêter. J'annule généralement la variable timer dans le gestionnaire de timeout plutôt que d'utiliser un indicateur pour indiquer que le timer ne fonctionne pas. Il y a une belle description sur W3Schools sur le fonctionnement du minuteur. Dans leur exemple, ils utilisent une variable indicateur.
La valeur que vous voyez est une poignée de la minuterie actuelle, qui est utilisée lorsque vous la désactivez (l'arrêtez).
Ce que je fais c'est:
var timer = null;
if (timer != null) {
window.clearTimeout(timer);
timer = null;
}
else {
timer = window.setTimeout(yourFunction, 0);
}
Pas besoin de vérifier la minuterie existante, effacez simplement Timimout avant de démarrer une minuterie.
var timer;
var startTimer = function() {
clearTimout(timer);
timer = setTimeout(DoThis, 6000);
}
cela effacera tout minuteur avant de démarrer une nouvelle instance.
Définissez une autre variable Timer_Started = true
avec votre minuterie. Et changez également la variable en false
lorsque la fonction timer est appelée:
// 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.");
}
}
J'annule généralement le chronomètre:
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!');
}
Je sais que c'est un nécropostage mais je pense que les gens le recherchent toujours.
C'est ce que j'utilise: 3 variables:
t
pendant millisecondes depuis .. dans Objet Date pour la prochaine cibletimerSys
pour l'intervalle réelseconds
seuil pour les millisecondes a été définiensuite j'ai un function timer
avec 1 variable, la fonction vérifie si la variable est vraiment , si c'est le cas, il vérifie si la minuterie est déjà en cours d'exécution et si c'est le cas, remplit le vars globaux , sinon vraiment , faussement , efface l'intervalle et définit global var timerSys
à faux;
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);
}
Exemple I
Vous pouvez maintenant ajouter une ligne à la fonction 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
}
Et exécutez:
timer(5000);
Toutes les 5 secondes dans la console:
//output:: Next execution: Sun May 08 2016 11:01:05 GMT+0200 (Romance (zomertijd))
Exemple II
function sys() {
t = new Date().setMilliseconds(seconds);
console.log("Next execution: " + seconds/1000 + " seconds");
}
$(function() {
timer(5000);
});
Toutes les 5 secondes dans la console:
//output:: Next execution: 5 seconds
Exemple 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>
Notez de cette façon que vous pouvez descendre en dessous de 0