1984 votes

Que dois-je faire si je veux une version JavaScript de sleep() ?

<p>Y a-t-il une meilleure façon à l’ingénieur un <code></code> en JavaScript que ce qui suit <code></code> fonction (<a href="http://www.sean.co.uk/a/webdesign/javascriptdelay.shtm">de cassure</a>) ?<pre><code></code></pre><p>Ce n’est pas un doublon de <a href="http://stackoverflow.com/questions/758688/sleep-in-javascript">dormir en Javascript</a>; Je veux un vrai sommeil au milieu d’une fonction et non un délai avant un morceau de code s’exécute.</p></p>

843voto

Ben Flynn Points 5346

Je pense qu'il est parfaitement raisonnable d'en souhaitez effectuer une action, attendre, puis effectuer une autre action. Si vous êtes habitué à l'écriture en multi-thread langues, vous avez probablement l'idée de céder à l'exécution pendant un certain temps jusqu'à ce que votre fils se réveille.

Le problème ici est que JavaScript est un thread unique événement à base de modèle. Alors que dans un cas spécifique, il peut être intéressant de disposer de l'ensemble moteur, attendez quelques secondes, en général, c'est une mauvaise pratique. Supposons que je voulais faire usage de vos fonctions lors de l'écriture de mon propre? Quand j'ai appelé votre méthode, mes méthodes seraient tous geler. Si JavaScript pourrait en quelque sorte de préserver votre fonction du contexte d'exécution, de le stocker quelque part, puis de le mettre en arrière et reprendre plus tard, puis le sommeil pourrait arriver, mais qui serait grosso modo le filetage.

Si vous êtes un peu coincé avec ce que d'autres ont suggéré-vous aurez besoin de casser votre code en plusieurs fonctions.

Votre question est un peu un faux choix, puis. Il n'y a pas moyen de dormir dans la manière que vous voulez, vous ne devriez pas poursuivre la solution que vous suggérez.

628voto

Nosredna Points 33670
<p>En JavaScript, je réécris chaque fonction afin qu’il peut se terminer dès que possible. Vous voulez que le navigateur en contrôle, donc il peut faire vos modifications de DOM.<p>Chaque fois que j’ai voulu un sommeil au milieu de ma fonction, j’ai refait pour utiliser un setTimeout().</p><p>MISE À JOUR :</p><pre><code></code></pre><p>Exemple d’utilisation :</p><pre><code></code></pre></p>

286voto

StephaneAG Points 37
<p>uniquement pour le débogage/dev, je poste cela si c’est utile à quelqu'un<p>Intéressant les choses, à Firebug (et probablement d’autres consoles de js), rien se produire après avoir frappé entrer, qu’après la durée de sommeil spécifiée (...)</p><pre><code></code></pre><p>Exemple d’utilisation :</p><pre><code></code></pre></p>

171voto

DevinB Points 5960

Je suis d'accord avec les autres posters, une longue nuit de sommeil est une mauvaise idée.

Cependant, setTimeout ne résiste pas à l'exécution, il exécute la ligne suivante de la fonction immédiatement après le délai d'attente est DÉFINI, et non pas après l'expiration de ce délai, de sorte que de ne pas accomplir la même tâche que le sommeil allait accomplir.

La façon de le faire est de ventilation de votre fonction avant et après les parties.

function doStuff()
{
  //do some things
  setTimeout(continueExecution, 10000) //wait ten seconds before continuing
}

function continueExecution()
{
   //finish doing things after the pause
}

Assurez-vous que vos noms de fonction encore décrire avec précision ce que chaque morceau est en train de faire (I. E. GatherInputThenWait et CheckInput, plutôt que de funcPart1 et funcPart2)

Modifier

Cette méthode permet d'atteindre le but de ne pas exécuter les lignes de code que vous décidez qu'APRÈS un délai d'attente, tout en continuant de rendre le contrôle au client PC pour exécuter tout ce qu'elle a mis en file d'attente.

Modifier

Comme l'a souligné dans les commentaires ce sera absolument PAS TRAVAILLER dans une boucle. Vous pourriez faire un peu de fantaisie (moche) de piratage pour le faire fonctionner dans une boucle, mais en général, qui va juste faire désastreuses de code spaghetti.

121voto

chaos Points 69029
<p>S’il vous plaît, ne faites pas une fonction sommeil occupé-wait. <code></code>et <code></code> tout ce que vous devez faire.</p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: