JavaScript dormir/esperar antes de continuar

Eu tenho um código JavaScript ao qual preciso adicionar uma função sleep/wait. O código que estou executando já está em uma função, por exemplo:

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

Ouvi dizer que uma possível solução pode incluir

setTimeout

mas não tenho a certeza de como usá-lo neste caso.

Eu posso't usar PHP, pois meu servidor não o suporta, embora usar jQuery seria bom.

Solução

O JS não tem uma função de sono, ele tem funções setTimeout() ou setInterval().

Se você pode mover o código que você precisa executar após a pausa para o setTimeout() callback, você pode fazer algo como isto:

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

ver exemplo aqui : http://jsfiddle.net/9LZQp/

Isto ganhou'não interrompe a execução do seu script, mas desde que o setTimeout() seja uma função assíncrona, este código

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

irá imprimir isto na consola:

HELLO
DOG
THIS IS

(note que DOG é impresso antes de THIS IS)


Você pode usar o seguinte código para simular um sono por curtos períodos de tempo:

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

agora, se queres dormir por 1 segundo, usa:

sleep(1000);

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

por favor note que *este código irá manter o seu script ocupado por n milissegundos*. Isto não só irá parar a execução do Javascript na sua página, mas, dependendo da implementação do navegador, pode possivelmente tornar a página completamente sem resposta, e possivelmente tornar todo o navegador sem resposta***. Em outras palavras, isto é quase sempre a coisa errada a fazer.

Comentários (16)