web-dev-qa-db-fra.com

Comment attendre un certain temps après l'exécution d'une fonction

Si j'ai une fonction pour laquelle mon code js doit être exécuté immédiatement, mais après l'exécution, attendez 2 secondes. Comment réaliser cette logique?

( Remarque: Il s'agit simplement de la logique inverse de la comparaison avec setTimeout(), puisque setTimeout() commence par attendre un certain temps, puis exécutez la fonction.

24
Mellon

Il suffit de placer votre code dans une fonction anonyme passée à setTimeout.

par exemple.

functionToRunFirst();
setTimeout(function() {
    // rest of code here
}, 2000);
40
GregL

Je pense que ce que vous recherchez est une méthode pour suspendre l'exécution du code jusqu'à l'expiration du délai. De nombreux programmeurs amateurs souhaitent une telle construction, mais celle-ci n'existe pas en JavaScript. Ce n'est pas nécessaire. setTimeout et setInterval sont des solutions idéales pour tous les besoins en JavaScript.

Cependant, JavaScript est un langage puissant. Vous pouvez construire votre propre construction pour résoudre ce problème. Jetez un coup d'oeil à blog post de Neil Mix . Avec son approche, vous pouvez créer une fonction de veille qui peut être utilisée dans les directions suivantes (notez que seul Firefox prend actuellement en charge JavaScript 1.7):

function mainGeneratorFunction() {
    functionToRunFirst();
    yield sleep(2000);
    //rest of the code
}

Cependant, pour les autres navigateurs, ne désespérez pas. Vous pouvez utiliser un hack appelé XHR Sleeping. Dans cette approche, vous utilisez simplement une variable XMLHttpRequest synchrone pour appeler un script côté serveur tel que php, qui se met ensuite en veille pendant l'heure spécifiée et revient après son réveil. Le code JavaScript est le suivant:

function sleep(microseconds) {
    var request = new XMLHttpRequest();
    request.open("GET", "sleep.php?time=" + microseconds, false);
    request.send();
}

functionToRunFirst();
sleep(2000000);
//rest of the code

La fonction de sommeil php est la suivante:

<?php
    usleep($_GET["time"]);
?>
6
Aadit M Shah

utiliser setTimeout est une façon de le faire

function run() {    
    // run this code

    setTimeout(afterTwoSeconds, 2000);    
}

function afterTwoSeconds() {    
    // run this code two seconds after executing run.   
}

// call run
run();
3
Russ Cam

compte tenu de remplir de votre part, cela devrait courir 5 fois avec une demi-seconde minuterie

var counter = 0;
var arrayOfPicture = []; //fill this out

function gifSimulator() {

    //use the counter as an index in the array, and change the image source of your element with that.


    if (counter < 5) {

        setTimeout(function () {

            counter++;

            gifSimlulator();

        }, 500); //lets wait half a second
    }
}
1
NachoDawg

que signifie "attendre 2 secondes"? voulez-vous dire que vous voulez bloquer un retour de la fonction pendant 2 secondes?

si c'est le cas, vous ne pouvez pas faire cela. il n'y a pas de fonction sleep () en JavaScript.

vous devrez simplement utiliser setTimeout ()

1
Kae Verens

Rien de mal avec les réponses ci-dessus, mais une autre façon est:

$("#somethingThatDoesntExist").fadeTo(2000, 1, function() {
    // two seconds later
});
1
Grim...

Je ne sais pas pourquoi vous y allez beaucoup. Je crois que nous pouvons le faire en utilisant l'objet Date. Prenez d'abord la valeur de la date et utilisez la fonction setInterval pour attendre que nous obtenions l'intervalle spécifié (obtenez une nouvelle date et vérifiez la différence). Une fois que nous obtenons cette réinitialisation, la fonction intervalle et procédons avec votre code une fois que vous pouvez l'exécuter.

0
Siva