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');
  }
}

Vous devez placer votre code dans la fonction de rappel que vous fournissez à setTimeout :

function stateChange(newState) {
    setTimeout(function () {
        if (newState == -1) {
            alert('VIDEO HAS STOPPED');
        }
    }, 5000);
}

Tout autre code sera exécuté immédiatement.

Commentaires (3)

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 :

function stateChange(newState) {
    setTimeout(function(){
        if(newState == -1){alert('VIDEO HAS STOPPED');}
    }, 5000);
}

Mais, si vous avez un code comme celui-ci :

stateChange(-1);
console.log("Hello");

L'instruction console.log() s'exécutera immédiatement. Elle n'attendra pas que le délai d'attente soit écoulé dans la fonction stateChange(). 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.

Commentaires (3)

Utilisez une fonction de retardement comme celle-ci :

var delay = ( function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout (timer);
        timer = setTimeout(callback, ms);
    };
})();

Utilisation :

delay(function(){
    // do stuff
}, 5000 ); // end delay

Les crédits vont à l'utilisateur CMS, voir https://stackoverflow.com/q/1909441/1066234

Commentaires (0)