JavaScript dormir/esperar antes de continuar

Tengo un código JavaScript al que tengo que añadir una función de reposo/espera. El código que estoy ejecutando ya está en una función, por ejemplo:

function myFunction(time)
{
    alert('time starts now');
    //code to make the program wait before continuing
    alert('time is up')
}

He oído que una posible solución podría ser

setTimeout

pero no estoy seguro de cómo utilizarlo en este caso.

No puedo usar PHP, ya que mi servidor no lo soporta, aunque usar jQuery estaría bien.

Solución

JS no tiene una función sleep, tiene las funciones setTimeout() o setInterval().

Si puedes mover el código que necesitas ejecutar después de la pausa al callback setTimeout(), puedes hacer algo como esto:

//code before the pause
setTimeout(function(){
    //do what you need here
}, 2000);

ver ejemplo aquí : http://jsfiddle.net/9LZQp/

Esto no detendrá la ejecución de tu script, pero mientras setTimeout() sea una función asíncrona, este código

console.log("HELLO");
setTimeout(function(){
    console.log("THIS IS");
}, 2000);
console.log("DOG");

imprimirá esto en la consola:

HELLO
DOG
THIS IS

(nótese que DOG se imprime antes de THIS IS)


Puede utilizar el siguiente código para simular un sueño durante períodos cortos de tiempo:

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

Ahora, si quieres dormir durante 1 segundo, sólo tienes que usar

sleep(1000);

ejemplo: http://jsfiddle.net/HrJku/1/

tenga en cuenta que este código mantendrá su script ocupado durante n milisegundos. Esto no sólo detendrá la ejecución de Javascript en su página, sino que, dependiendo de la implementación del navegador, puede hacer que la página no responda completamente, y posiblemente hacer que todo el navegador no responda. En otras palabras, esto es casi siempre un error.

Comentarios (16)