Je veux créer une fonction "d'attente" javascript. que dois-je modifier?
function wait(waitsecs){
setTimeout(donothing(), 'waitsecs');
}
function donothing() {
}
MODIFIER (2019)
Cette question a acquis une certaine popularité.
6,5 ans, une expérience extrême de JS et 4 versions ECMA plus tard, je pense que c'est actuellement la plus belle solution à ce que moi et probablement la plupart des gens qui tombons sur cette question voulaient atteindre:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
console.log('This is a message')
await sleep(5000)
console.log('This is a message 5 seconds into the future')
Ce n'est pas du tout quelque chose que vous devez utiliser partout. Il fait cependant exactement ce que je cherchais à l'époque et il le fait à merveille. Il y avait des astuces, et il y avait bien sûr setTimeout
, mais en réalisant ce que je voulais comme je le voulais, ce n'était pas possible quand j'ai posé cette question.
Javascript n'est pas enfilé, donc une "attente" gèlerait la page entière (et entraînerait probablement l'arrêt complet du script par le navigateur).
Pour résoudre spécifiquement votre problème, vous devez supprimer les crochets après donothing
dans votre appel setTimeout
et faire de waitsecs
un nombre et non une chaîne:
console.log('before');
setTimeout(donothing,500); // run donothing after 0.5 seconds
console.log('after');
Mais cela n'arrêtera pas l'exécution; "après" sera enregistré avant l'exécution de votre fonction.
Pour attendre correctement, vous pouvez utiliser des fonctions anonymes:
console.log('before');
setTimeout(function(){
console.log('after');
},500);
Toutes vos variables seront toujours là dans la section "après". Vous ne devez pas les enchaîner - si vous en avez besoin, vous devez regarder comment vous structurez le programme. Vous pouvez également utiliser setInterval
/clearInterval
s'il a besoin de boucler.
Vous ne devez pas le modifier, vous devez le supprimer complètement.
Toute tentative d'arrêter l'exécution pendant un certain temps verrouille le navigateur et le fait passer en état de non-réponse. La seule chose que vous pouvez faire est d'utiliser correctement setTimeout
.