Question

Le navigateur garder une trace des ID setInterval et setTimeout actifs? Ou est-ce uniquement au développeur de garder une trace de?

Si elle garde la trace d'eux, est accessible via la nomenclature?

Était-ce utile?

La solution

Il est pour le développeur de garder la trace. Vous pouvez le faire en utilisant la valeur renvoyée de la fonction setTimeout / setInterval et passer cette valeur à la fonction clearTimeout / clearInterval -. Comme décrit dans d'autres réponses ici

Cela semble être parce que chaque navigateur mettra en œuvre le suivi des intervalles à leur manière.

De w3.org/TR/2009/WD-html5-20090212/no.html (un projet, mais W3Schools et

Autres conseils

Vous pouvez ajouter ces minuteries globaux de suivi en remplaçant les fonctions setTimeout / seInterval. En bonus, vous ajoutez facilement le code lorsqu'une minuterie est réglée ou sauté, le suivi en direct des minuteries ou des minuteries, etc ... éclatés

Par exemple:

timers = {}; // pending timers will be in this variable
originalSetTimeout = window.setTimeout;
// override `setTimeout` with a function that keeps track of all timers
window.setTimeout = function(fu, t) {
    var id = originalSetTimeout(function() {
        console.log(id+" has timed out");
        delete timers[id]; // do not track popped timers 
        fu();
    }, t);
    // track this timer in the `timers` variable
    timers[id] = {id:id,  setAt: new Date(),  timeout: t};
    console.log(id+" has been set to pop in "+t+"ms");
}
// from this point onward all uses of setTimeout will be tracked, logged to console and pending timers will be kept in the global variable "timers".

Cela peut vous intéresse, si vous êtes curieux de savoir comment la minuterie est « rappeler » par sa fenêtre.

<!doctype html> 
<html lang= "en"> 
<head> 
<meta charset= "utf-8"> 
<title>Timer </title> 
</head> 
<body>
<h1>Timers</h1>
<script>

if(!window.timers){
    var timers= [], i= 0;
    while(i<5){
        timers.push(setInterval(function(){
            if(confirm(timers.join('\n')+'\nRemove a timer?')){
                clearInterval(timers.shift());
            }
        },
        i*1000+1000));
        ++i;
    }
}
</script>

</body> 
</html> 

Mise à jour:

Il y a 2 aspects à cette question.

  1. Le navigateur garder une trace des ID de minuterie?
  2. Sont-ils accessibles

Je ne peux présumer de # 1 (et plus tard # 2) que l'OP signifie « sont-ils suivis » au sens général parce qu'en tant que développeur il / elle souhaite contrôler.

En bref, oui, ils sont suivis (comme @s_hewitt a noté, en tant que valeurs long par le navigateur) et ils peuvent être gérés par le développeur en maintenant une référence aux minuteries lors de l'installation.

En tant que développeur vous pouvez contrôler (par exemple, arrêt) en appelant au ( clearInterval (HandleRef ) ou clearTimeout (HandleRef) )

Cependant, il n'y a pas window.timers par défaut ou d'une collection similaire qui vous donne une liste des compteurs existants - vous aurez besoin de maintenir vous-même si vous sentez que vous devez

.
function startPolling(delay){
  pollHandle = setInterval(doThis, delay);
}
function stopPolling(){
  clearInterval(pollHandle);
}

function doThisIn30minUnlessStopped(){
  timerHandle = setTimeout(doThisThing, 1800000);
}
function stop30minTimer(){
  clearTimeout(timerHandle);
}    

Il vous suffit de créer une référence variable à votre minuterie, et si / si nécessaire, clairement par son nom.

Lorsque vous chargez une autre page, tous les compteurs sont automatiquement effacés par le navigateur afin que vous n'avez pas besoin de maintenir une poignée, et les effacer à moins que vous devez / voulez.

Regardez les scripts ci-dessous, le navigateur pouvait se rappeler l'identifiant de chaque itération setTimeout

for (i = 1; i <= d; i++) {
          (function(j) {
                var delay = j/d; 
               t[j] = setTimeout(function() {      
                      elem.style.top = j+"px";
                     },delay);

            })(i);           
 } 

Vous pouvez y accéder par

for (i in t) {
      alert(t[i]);  
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top