JavaScript dorme/attende prima di continuare

Ho un codice JavaScript a cui ho bisogno di aggiungere una funzione sleep/wait. Il codice che sto eseguendo è già in una funzione, ad es:

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

Ho sentito che una possibile soluzione potrebbe includere

setTimeout

ma non sono sicuro di come usarlo in questo caso.

Non posso usare PHP, poiché il mio server non lo supporta, anche se usare jQuery andrebbe bene.

Soluzione

JS non ha una funzione sleep, ha le funzioni setTimeout() o setInterval().

Se puoi spostare il codice che hai bisogno di eseguire dopo la pausa nel callback setTimeout(), puoi fare qualcosa del genere:

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

vedi esempio qui: http://jsfiddle.net/9LZQp/

Questo non fermerà l'esecuzione del tuo script, ma finché setTimeout() è una funzione asincrona, questo codice

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

lo stamperà nella console:

HELLO
DOG
THIS IS

(notare che DOG viene stampato prima di THIS IS)


Potete usare il seguente codice per simulare un sonno per brevi periodi di tempo:

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

ora, se volete dormire per 1 secondo, basta usare

sleep(1000);

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

si prega di notare che questo codice terrà occupato il vostro script per n millisecondi. Questo non solo fermerà l'esecuzione di Javascript sulla vostra pagina, ma a seconda dell'implementazione del browser, potrebbe rendere la pagina completamente non reattiva, e forse rendere l'intero browser non reattivo. In altre parole questa è quasi sempre la cosa sbagliata da fare.

Commentari (16)