Si j'ai une fonction que j'aimerais que mon code js exécute immédiatement mais après l'exécution, attendez 2 secondes. Comment réaliser cette logique?

( Remarque: C'est juste la logique inverse comparer avec setTimeout(), car setTimeout() attendez d'abord un certain temps puis exécutez la fonction.)

27
Mellon 15 nov. 2011 à 13:15

7 réponses

Meilleure réponse

Mettez simplement votre code dans une fonction anonyme passée à setTimeout.

Par exemple.

functionToRunFirst();
setTimeout(function() {
    // rest of code here
}, 2000);
44
GregL 15 nov. 2011 à 09:18

Je ne sais pas pourquoi vous allez autant. 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 aurons réinitialisé la fonction d'intervalle et continuer avec votre code, cela pourra s'exécuter.

0
Siva 29 avril 2015 à 10:18

Rien de mal avec les réponses ci-dessus, mais une manière différente est:

$("#somethingThatDoesntExist").fadeTo(2000, 1, function() {
    // two seconds later
});
1
Grim... 15 nov. 2011 à 09:20

Que signifie «attendre 2 secondes»? voulez-vous dire que vous souhaitez 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 15 nov. 2011 à 09:18

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 15 nov. 2011 à 09:20

Étant donné un peu de remplissage de votre part, cela devrait fonctionner 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 31 mars 2015 à 10:20

Je pense que ce que vous recherchez est une méthode pour suspendre l'exécution du code jusqu'à expiration. De nombreux programmeurs amateurs souhaitent une telle construction, mais elle n'existe pas en JavaScript. Ce n'est pas nécessaire. À toutes fins utiles en JavaScript, setTimeout et setInterval sont des solutions candidates parfaites.

Cependant, JavaScript est un langage puissant. Vous pouvez créer votre propre construction pour résoudre ce problème. Jetez un œil au de Neil Mix article de blog. Avec son approche, vous pouvez créer une fonction de veille qui peut être utilisée de la manière suivante (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 un XMLHttpRequest synchrone pour appeler un script côté serveur comme php, qui dort ensuite pendant le temps spécifié 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 veille php est la suivante:

<?php
    usleep($_GET["time"]);
?>
8
Aadit M Shah 15 nov. 2011 à 09:57
8133947