Existe-t-il un moyen de vérifier si une var utilise setInterval ()?

Par exemple, je définis un intervalle comme

timer = setInterval(fncName, 1000); 

Et si je vais faire

 clearInterval(timer); 

Il efface l'intervalle, mais est-il possible de vérifier qu'il a effacé l'intervalle? J'ai essayé d'obtenir la valeur de celui-ci alors qu'il a un intervalle et quand ce n'est pas, mais tous deux semblent être des nombres.

Il n'y a aucun moyen direct de faire ce que vous recherchez. Au lieu de cela, vous pouvez définir la timer sur false chaque fois que vous appelez clearInterval :

 // Start timer var timer = setInterval(fncName, 1000); // End timer clearInterval(timer); timer = false; 

Maintenant, la timer sera fausse ou aura une valeur à un moment donné, vous pouvez donc simplement vérifier avec

 if (timer) ... 

Si vous souhaitez encapsuler ceci dans une classe:

 function Interval(fn, time) { var timer = false; this.start = function () { if (!this.isRunning()) timer = setInterval(fn, time); }; this.stop = function () { clearInterval(timer); timer = false; }; this.isRunning = function () { return timer !== false; }; } var i = new Interval(fncName, 1000); i.start(); if (i.isRunning()) // ... i.stop(); 

Les valeurs de retour de setTimeout et setInterval sont des valeurs totalement opaques. Vous ne pouvez en tirer aucune signification; La seule utilisation pour eux est de passer à clearTimeout et à clearInterval .

Il n'y a pas de fonction pour tester si une valeur correspond à un délai / intervalle actif, désolé! Si vous vouliez une minuterie dont vous pouviez vérifier l'état, vous devriez créer vos propres fonctions d'emballage qui se souvenaient de ce que l'état défini / clair était.

Vous pourriez annuler la méthode setInterval et ajouter la fonctionnalité pour suivre vos intervalles. Voici un exemple sans précédent pour décrire l'idée. Il fonctionnera uniquement sur la fenêtre actuelle (si vous avez plusieurs, vous pourriez changer cela à l'aide de l'objet prototype) et cela ne fonctionnera que si vous annulez les fonctions AVANT que les fonctions que vous souhaitez surveiller soient enregistrées:

 var oldSetInterval = window.setInterval; var oldClearInterval = window.clearInterval; window.setInterval = function(func, time) { var id = oldSetInterval(func, time); window.intervals.push(id); return id; } window.intervals = []; window.clearInterval = function(id) { for(int i = 0; i < window.setInterval.intervals; ++i) if (window.setInterval.intervals[i] == id) { window.setInterval.intervals.splice(i, 1); } oldClearInterval(id); } window.isIntervalRegistered(id) { for(int i = 0; i < window.setInterval.intervals; ++i) if (window.setInterval.intervals[i] == func) return true; return false; } var i = 0; var refreshLoop = setInterval(function(){ i++; }, 250); if (isIntervalRegistered(refrshLoop)) alert('still registered'); else alert('not registered'); clearInterval(refreshLoop); if (isIntervalRegistered(refrshLoop)) alert('still registered'); else alert('not registered'); 

La solution à ce problème: Créez un compteur global incrémenté dans votre code exécuté par setInterval. Ensuite, avant de rappeler setInterval, testez si le compteur est toujours incrémenté. Dans l'affirmative, votre setInterval est toujours actif. Sinon, vous allez bien.

Beaucoup de réponses compliquées ci-dessus, cette méthode fonctionne très bien pour moi:

 if (typeof timer == 'undefined') { //timer has been cleared } 

J'ai fait cela comme ci-dessous, mon problème a été résolu. Vous devez définir la valeur comme «fausse», lorsque vous effacez la temporisation.

 var timeer=false; ---- ---- if(timeer==false) { starttimer(); } ----- ----- function starttimer() { timeer=setInterval(activefunction, 1000); } function pausetimer() { clearTimeout(timeer); timeer=false; }