Les timers

Voir la vidéo
Description Sommaire

Si on souhaite éxécuter du code après une durée précise ou à un intervalle régulier on aura la possibilité d'utiliser les fonctions setTimeout() et setInterval().

setTimeout

setTimeout(callback, duration) permet d'attendre une durée spécifique, définie en millisecondes, avant de lancer le code du callback passé en premier paramètre. Cette fonction renvoie un entier qui pourra ensuite être utilisé dans la méthode clearTimeout pour annuler le timeout.

const t = setTimeout(() => {
    console.log('10 secondes')
}, 10_000)
// clearTimeout(t) permettra de supprimer le timer

setInterval

setInterval(callback, duration) permet d'exécuter le callback passé en premier paramètre à intervalle régulier. Cette fonction renvoie un entier qui pourra ensuite être utilisé dans la méthode clearInterval pour supprimer l'intervalle.

const t = setInterval(() => {
    console.log('+1')
}, 10_000)
// clearInterval(t) permettra de supprimer l'intervalle

Code asynchrone

Le JavaScript a comme particularité d'être capable de fonctionner de manière asynchrone et peut donc continuer à exécuter du code pendant certaines opérations, et c'est le cas avec les timers.

console.log('Timeout')
setTimeout(() => {
    console.log("Après 1 seconde")
}, 1000)
console.log('/Timeout')
// Timeout
// /Timeout
// Après 1 seconde

Le code ne s'exécutera pas de façon linéaire mais suivra en premier lieu le fil principal d'exécution

console.log('Timeout')
setTimeout(// Le code de la fonction sera mis en attente en interne)
console.log('/Timeout')

Une fois que le fil principal a fini de s'exécuter les callback asynchrones sont exécutés lorsque le temps est écoulé.

console.log("Après 1 seconde")

Ainsi, même avec un timeout de 0 seconde l'ordre d'exécution restera le même.

console.log('Timeout')
setTimeout(() => {
    console.log("Après 1 seconde")
}, 0)
console.log('/Timeout')
// Timeout
// /Timeout
// Après 1 seconde

Le fil principal a toujours la priorité même s'il bloque le script pendant un temps supérieur au timeout indiqué.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager