2013-05-18 11 views
43

Voglio interrompere l'esecuzione per 2 secondi. Quindi è questo, ma ora segue un blocco di codice: HW 10,12 Come sospendere l'esecuzione del codice javascript per 2 secondi

for (var i = 1; i <=5; i++) 
{ 
document.write(i); 
sleep(2);//for the first time loop is excute and sleep for 2 seconds   
}; 

</script> 
</head> 
<body> 
</body> 
</html> 

Per la prima volta viene ciclo excute e dormire per 2 secondi. Voglio interrompere l'esecuzione per due secondi?

+0

for (var i = 1; i <= 5; i ++) { \t \t \t document.write (i); \t \t sleep (4); \t \t \t \t \t } –

+0

Perché vuoi per sospendere l'esecuzione per due, o un qualsiasi numero di secondi,? –

+1

È possibile modificare la domanda per correggere il codice sorgente. – knuton

risposta

14

È possibile utilizzare setTimeout per fare questo

function myFunction() 
    { 
    // your code 

    // stop for sometime if needed 
    setTimeout(myFunction, 5000); 
    } 
39

Non c'è (sicuro) modo per sospendere l'esecuzione. È possibile, tuttavia, fare qualcosa di simile utilizzando setTimeout:

function writeNext(i) 
{ 
    document.write(i); 

    if(i == 5) 
     return; 

    setTimeout(function() 
    { 
     writeNext(i + 1); 

    }, 2000); 
} 

writeNext(1); 
+13

Perché il downvote? –

+4

Perché document.write() rovinerà il DOM –

+33

@ManuViswam Non è il mio documento.write, questo è il codice della domanda. –

2

This Link potrebbe essere utile per voi.

Ogni volta che ho desiderato dormire nel mezzo della mia funzione, ho effettuato il refactoring per utilizzare un setTimeout().

2

Non c'è modo di interrompere l'esecuzione del codice come si farebbe con un linguaggio procedurale. Si può invece fare uso di setTimeout e alcuni trucchi per ottenere un timeout parametrizzata:

for (var i = 1; i <= 5; i++) { 
    var tick = function(i) { 
     return function() { 
      console.log(i); 
     } 
    }; 
    setTimeout(tick(i), 500 * i); 
} 

Demo qui: http://jsfiddle.net/hW7Ch/

84

JavaScript è single-threaded, quindi per sua natura, non ci dovrebbe essere una funzione di sonno a causa di sonno bloccherà il filo. setTimeout è un modo per aggirare questo inviando un evento alla coda da eseguire in seguito senza bloccare il thread. Ma se volete una funzione vero sonno, è possibile scrivere qualcosa di simile:

function sleep(miliseconds) { 
    var currentTime = new Date().getTime(); 

    while (currentTime + miliseconds >= new Date().getTime()) { 
    } 
} 
+2

** NON MI PIACE QUELLO !!! ** Ciò causa il blocco TOTALE INTERO (anche altre schede interessate) durante quel periodo, poiché il comando 'while' viene eseguito senza limiti dalla CPU, causando il blocco. Vedi esempio pratico - https://jsfiddle.net/mn6yagqx/ (prova te stesso) –

+0

@ T.Todua: Ecco perché il post non lo ha raccomandato. Questo è solo un modo per ovviare al caso in cui la gente vuole farlo comunque –

Problemi correlati