JavaScriptCode asynchrone

setInterval()

Appelle une fonction de façon répétée, à l’intervalle donné, jusqu’à l’arrêt par clearInterval().

Renvoie
Un identifiant d’intervalle à utiliser avec clearInterval().
Sur cette page

Exemple

#
JavaScript
let seconds = 3

const countdown = setInterval(() => {
  console.log(seconds)
  seconds -= 1

  if (seconds === 0) {
    clearInterval(countdown)
    console.log('Début de la mission !')
  }
}, 300)
Console
3
2
1
Début de la mission !

Définition et utilisation

#

La fonction setInterval() exécute la fonction donnée à plusieurs reprises, chaque fois après le même intervalle en millisecondes. Le premier appel n’a lieu qu’après le premier intervalle, pas immédiatement.

Elle renvoie un identifiant que vous passez à clearInterval() pour arrêter la répétition. Sans cela, la fonction continue d’être appelée indéfiniment, même quand plus personne n’a besoin de ses résultats. Un intervalle oublié est une cause fréquente de fuites de mémoire et de bugs difficiles à trouver.

L’intervalle n’est pas parfaitement précis. Quand le navigateur est occupé ou que l’onglet s’exécute en arrière-plan, les appels peuvent être retardés. Pour les compteurs, calculez donc le temps écoulé à partir de Date.now(), et pour les animations, utilisez requestAnimationFrame().

Syntaxe

#
Syntaxe
const intervalId = setInterval(callback, delay)
setInterval(callback, delay, arg1, arg2, …)

clearInterval(intervalId)

Paramètres

#
  • callback

    function

    Fonction appelée toutes les delay millisecondes.
  • delay

    nombre

    L’intervalle entre les appels, en millisecondes.
  • arg1…argN

    optionnels

    Arguments transmis à la fonction à chaque appel.

Plus d’exemples

#
Progression qui s’arrête à 100 %
JavaScript
let progress = 0

const loader = setInterval(() => {
  progress += 25
  console.log(`Chargement : ${progress} %`)
  if (progress >= 100) clearInterval(loader)
}, 200)
Console
Chargement : 25 %
Chargement : 50 %
Chargement : 75 %
Chargement : 100 %
Un enchaînement de setTimeout() plutôt qu’un intervalle
JavaScript
let attempt = 1

function checkStatus() {
  console.log(`Vérification du statut, tentative ${attempt}`)
  attempt += 1
  if (attempt <= 3) setTimeout(checkStatus, 200)
}

checkStatus()
Console
Vérification du statut, tentative 1
Vérification du statut, tentative 2
Vérification du statut, tentative 3

L’appel suivant n’est planifié qu’une fois le précédent terminé, donc les appels ne se chevauchent jamais. C’est un bon modèle pour interroger un serveur dont le temps de réponse peut varier.

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Enregistrez toujours l’identifiant et appelez clearInterval() quand la répétition n’est plus nécessaire, par exemple à la fin d’un compte à rebours ou en quittant la vue.
  • Si un seul appel peut durer plus longtemps que l’intervalle (par exemple une requête vers un serveur), utilisez un enchaînement de setTimeout() pour que les appels ne se chevauchent pas.
  • Pour des animations fluides, utilisez requestAnimationFrame(), pas setInterval().

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.