Bonjour
Quelqu'un peut m'aider ,j'aimerais comprendre enfaite le fonctionnement de l'event loop
je sais que setInterval() est une fonction asynchrone et execute en boucle une instruction
let sec = 3
let countSecond = setInterval(function(){
sec -= 1
console.log(sec)
},1000)
console.log('#'+sec)//#3:cette valeur ne change pas
if(sec == 0)
{
clearInterval(countSecond)
}
**setInterval() m'affiche une nouvel valeur a chaque fois mais en dehors de la fonction "sec" ne change pas,donc la fonction clearInterval()
**n'est jamais executé
Comment résoudre ce problème?
Merci de vos reponses
En gros ton if ne vérifies qu'une seule fois si sec === 0, ensuite ton setInteval modifie la valeur des sec toutes les secondes, et quand il arrive a zéro ton code ne calcules pas le if qu'il a déjà utilisé
A chaques fois que tu modifies la valeur de sec, il faut que tu relances ton if, en mettant ce if dans la boucle setInterval:
let sec = 3
let countSecond = setInterval(function(){
sec -= 1
console.log(sec)
console.log('#'+sec)//#3:cette valeur va changer ^^
if(sec == 0)
{
clearInterval(countSecond)
}
},1000)
Après en orienté objet tu peux te faire un listenner pour observer tout ton code, maaais la ce serait plus simple de passer par React que de créer soit meme le listenner x)
Sinon rien a voir mais en code c'est mieux de morceler au maximum le code, histoire d'avoir le bon réflexe quand tu fera un gros projet :p
let sec = 3
function decrement() {
sec -= 1
if(sec == 0) clearInterval(countSecond)
}
let countSecond = setInterval(decrement(),1000)
Merci Popotte tres bonne reponse,j'ai seulement une chose à ajouter que je viens enfaite de comprendre
La raison pour laquelle la variable declaré dans le scope globale n'est pas modifié c'est parceque setInterval() crée un clone de la variable
donc il modifie la variable seulement dans son scope,
c'est bon à savoir !!! je tenais à la partager
Ah oui il y'a ça aussi, mais en vrai c'est une bonne chose, on créée un clone pour respecter l'immutabilité (dès fois c'est utile, des fois comme dans ce script ça ne sert a rien, mais c'est la règle :p) ^^