2013-05-18 14 views
43

Chcę zatrzymać wykonywanie na 2 sekundy. Tak to jest, ale teraz następujący blok kodu: HW 10,12 Jak wstrzymać wykonywanie kodu javascript na 2 sekundy

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> 

dla pierwszej pętli czasu jest excute i spać przez 2 sekundy. Chcę zatrzymać wykonywanie na dwie sekundy?

+0

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

+0

Dlaczego chcesz, aby wstrzymać wykonanie dla dwóch, lub dowolną liczbę, sekundach? –

+1

Możesz edytować swoje pytanie, aby naprawić kod źródłowy. – knuton

Odpowiedz

14

Można użyć setTimeout to zrobić

function myFunction() 
    { 
    // your code 

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

Nie ma (bezpieczny) sposób wstrzymać egzekucję. Można jednak zrobić coś takiego za pomocą setTimeout:

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

    if(i == 5) 
     return; 

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

    }, 2000); 
} 

writeNext(1); 
+13

Dlaczego upadek? –

+4

Dlaczego document.write() to zepsuje DOM –

+33

@ManuViswam To nie jest mój document.write, to kod z pytania. –

2

This Link może być pomocne dla Ciebie.

Za każdym razem, gdy potrzebowałem snu w środku mojej funkcji, ponownie użyłem funkcji setTimeout().

2

Nie ma sposobu, aby zatrzymać wykonywanie kodu, tak jak zrobiłbyś to z językiem proceduralnym. Zamiast tego można skorzystać z setTimeout i jakimś podstępem uzyskać sparametryzowanego timeout:

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

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

84

JavaScript jest jednowątkowy, więc z natury nie powinno być funkcją spania, ponieważ spania zablokuje wątek. setTimeout to sposób obejścia tego problemu poprzez opublikowanie zdarzenia w kolejce do wykonania później bez blokowania wątku. Ale jeśli chcesz prawdziwej funkcji uśpienia, można napisać coś takiego:

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

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

** NIE PODOBAJĄ SIĘ, ŻE !!! ** To powoduje, że w tym czasie zamrożono CAŁKĄ TAB (również inne karty), ponieważ polecenie 'while' jest wykonywane przez CPU w nieograniczonym czasie, powodując zamrożenie. Zobacz praktyczny przykład - https://jsfiddle.net/mn6yagqx/ (sprawdź sam siebie) –

+0

@ T.Todua: Właśnie dlatego post nie polecił tego. To tylko obejście problemu, na wypadek gdyby ludzie chcieli to zrobić –

Powiązane problemy