Recherche…


Syntaxe

  • timeoutID = setTimeout (function () {}, millisecondes)
  • intervalID = setInterval (function () {}, millisecondes)
  • timeoutID = setTimeout (function () {}, millisecondes, paramètre, paramètre, ...)
  • intervalID = setInterval (function () {}, millisecondes, paramètre, paramètre, ...)
  • clearTimeout (timeoutID)
  • clearInterval (intervalID)

Remarques

Si le délai n'est pas spécifié, la valeur par défaut est 0 milliseconde. Cependant, le retard réel sera plus long que cela ; Par exemple, la spécification HTML5 spécifie un délai minimum de 4 millisecondes.

Même lorsque setTimeout est appelé avec un délai de zéro, la fonction appelée par setTimeout sera exécutée de manière asynchrone.

Notez que de nombreuses opérations telles que la manipulation de DOM ne sont pas nécessairement terminées même si vous avez effectué l'opération et que vous êtes passé à la phrase de code suivante, vous ne devriez donc pas supposer qu'elles s'exécuteront de manière synchrone.

L'utilisation de setTimeout(someFunc, 0) file d'attente l'exécution de la fonction someFunc à la fin de la pile d'appels du moteur JavaScript en cours, de sorte que la fonction sera appelée une fois ces opérations terminées.

Il est possible de passer une chaîne contenant du code JavaScript ( setTimeout("some..code", 1000) ) à la place de la fonction ( setTimeout(function(){some..code}, 1000) ). Si le code est placé dans une chaîne, il sera analysé plus tard avec eval() . Les délais d'expiration de type chaîne ne sont pas recommandés pour des raisons de performances, de clarté et parfois de sécurité, mais il se peut que l'ancien code utilise ce style. Les fonctions de transmission sont prises en charge depuis Netscape Navigator 4.0 et Internet Explorer 5.0.

Les intervalles

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}

window.setInterval(waitFunc,5000);

Supprimer les intervalles

window.setInterval() renvoie un IntervalID , qui peut être utilisé pour empêcher l'exécution de cet intervalle. Pour ce faire, stockez la valeur de retour de window.setInterval() dans une variable et appelez clearInterval() avec cette variable comme seul argument:

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}    

var interval = window.setInterval(waitFunc,5000);

window.setTimeout(function(){
    clearInterval(interval);
},32000);

Cela se connectera. This will be logged every 5 seconds toutes les 5 secondes, mais l’arrêtera après 32 secondes. Donc, il va enregistrer le message 6 fois.

Supprimer les délais d'attente

window.setTimout() renvoie un TimeoutID , qui peut être utilisé pour empêcher l'exécution de ce délai. Pour ce faire, stockez la valeur de retour de window.setTimeout() dans une variable et appelez clearTimeout() avec cette variable comme seul argument:

function waitFunc(){
    console.log("This will not be logged after 5 seconds");
}
function stopFunc(){
    clearTimeout(timeout);
}

var timeout = window.setTimeout(waitFunc,5000);
window.setTimeout(stopFunc,3000);

Cela ne enregistrera pas le message car le temporisateur est arrêté après 3 secondes.

Set récursifTimeout

Pour répéter une fonction indéfiniment, setTimeout peut être appelé récursivement:

function repeatingFunc() {
    console.log("It's been 5 seconds. Execute the function again.");
    setTimeout(repeatingFunc, 5000);
}

setTimeout(repeatingFunc, 5000);

Contrairement à setInterval , cela garantit que la fonction s'exécutera même si le temps d'exécution de la fonction est plus long que le délai spécifié. Cependant, il ne garantit pas un intervalle régulier entre les exécutions de fonctions. Ce comportement varie également car une exception avant l'appel récursif à setTimeout l'empêche de se répéter, alors que setInterval se répète indéfiniment, quelles que soient les exceptions.

setTimeout, ordre des opérations, clearTimeout

setTimeout

  • Exécute une fonction après avoir attendu un nombre spécifié de millisecondes.
  • utilisé pour retarder l'exécution d'une fonction.

Syntaxe: setTimeout(function, milliseconds) ou window.setTimeout(function, milliseconds)

Exemple: Cet exemple affiche "hello" sur la console après 1 seconde. Le deuxième paramètre est en millisecondes, donc 1000 = 1 sec, 250 = 0,25 sec, etc.

setTimeout(function() {
    console.log('hello');
}, 1000);

Problèmes avec setTimeout

si vous utilisez la méthode setTimeout dans une boucle for :

for (i = 0; i < 3; ++i) {
  setTimeout(function(){
    console.log(i);
  }, 500);
}

Cela affichera la valeur 3 three fois, ce qui n'est pas correct.

Solution de ce problème:

for (i = 0; i < 3; ++i) {
  setTimeout(function(j){
    console.log(i);
  }(i), 1000);
}

Il affichera la valeur 0 , 1 , 2 . Ici, nous passons le i dans la fonction en tant que paramètre ( j ).

Ordre des opérations

De plus, en raison du fait que Javascript est à thread unique et utilise une boucle d'événement globale, setTimeout peut être utilisé pour ajouter un élément à la fin de la file d'attente d'exécution en appelant setTimeout avec un délai nul. Par exemple:

setTimeout(function() {
    console.log('world');
}, 0);

console.log('hello');

Va effectivement sortir:

hello
world

De même, zéro milliseconde ici ne signifie pas que la fonction dans setTimeout s'exécutera immédiatement. Cela prendra un peu plus que cela en fonction des éléments à exécuter restant dans la file d'attente d'exécution. Celui-ci est juste poussé à la fin de la file d'attente.

Annulation d'un délai d'attente

clearTimeout (): arrête l'exécution de la fonction spécifiée dans setTimeout()

Syntaxe: clearTimeout (timeoutVariable) ou window.clearTimeout (timeoutVariable)

Exemple :

var timeout = setTimeout(function() {
    console.log('hello');
}, 1000);

clearTimeout(timeout); // The timeout will no longer be executed

Les intervalles

la norme

Vous n'avez pas besoin de créer la variable, mais c'est une bonne pratique car vous pouvez utiliser cette variable avec clearInterval pour arrêter l'intervalle en cours d'exécution.

var int = setInterval("doSomething()", 5000 ); /* 5 seconds */
var int = setInterval(doSomething, 5000 ); /* same thing, no quotes, no parens */

Si vous devez transmettre des paramètres à la fonction doSomething, vous pouvez les transmettre en tant que paramètres supplémentaires au-delà des deux premiers pour définirInterval.

Sans chevauchement

setInterval, comme ci-dessus, fonctionnera toutes les 5 secondes (ou ce que vous avez défini), peu importe quoi. Même si la fonction do do Something prend plus de 5 secondes pour fonctionner. Cela peut créer des problèmes. Si vous voulez simplement vous assurer qu'il y a une pause entre les exécutions de doSomething, vous pouvez le faire:

(function(){

   doSomething();

   setTimeout(arguments.callee, 5000);

})()


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow