Détails
Attendez 5 secondes avant d'exécuter la ligne suivante
La fonction ci-dessous ne fonctionne pas comme je le voudrais ; étant un novice en JS, je n'arrive pas à comprendre pourquoi.
J'ai besoin qu'elle attende 5 secondes avant de vérifier si le newState
est -1
.
Actuellement, elle n'attend pas, elle vérifie tout de suite.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
257
3
Vous devez placer votre code dans la fonction de rappel que vous fournissez à
setTimeout
:Tout autre code sera exécuté immédiatement.
Vous ne devez pas essayer de faire une pause de 5 secondes en javascript. Cela ne fonctionne pas de cette façon. Vous pouvez programmer l'exécution d'une fonction de code dans 5 secondes, mais vous devez placer le code que vous voulez exécuter plus tard dans une fonction et le reste de votre code après cette fonction continuera à s'exécuter immédiatement.
Par exemple :
Mais, si vous avez un code comme celui-ci :
L'instruction
console.log()
s'exécutera immédiatement. Elle n'attendra pas que le délai d'attente soit écoulé dans la fonctionstateChange()
. Vous ne pouvez pas simplement mettre en pause l'exécution du javascript pendant une durée prédéterminée.Au lieu de cela, tout code que vous voulez exécuter avec retard doit être à l'intérieur de la fonction de rappel
setTimeout()
(ou appelé depuis cette fonction).Si vous essayez de faire une "pause" en bouclant, vous allez essentiellement "suspendre" l'interpréteur Javascript pendant un certain temps. Étant donné que Javascript n'exécute votre code que dans un seul thread, lorsque vous effectuez une boucle, rien d'autre ne peut être exécuté (aucun autre gestionnaire d'événement ne peut être appelé). Ainsi, le fait de boucler en attendant qu'une variable change ne fonctionnera jamais car aucun autre code ne peut s'exécuter pour modifier cette variable.
Utilisez une fonction de retardement comme celle-ci :
Utilisation :
Les crédits vont à l'utilisateur CMS, voir https://stackoverflow.com/q/1909441/1066234