2013-05-18 6 views
43

Я хочу остановить выполнение в течение 2 секунд. Так это, но теперь следует кодовый блок: HW 10,12 Как приостановить выполнение кода JavaScript за 2 секунды

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> 

для первого цикла временном преобразования приложений и сон в течение 2 секунд. Я хочу остановить выполнение в течение двух секунд?

+0

для (вар я = 1, г <= 5; я ++) { \t \t \t document.write (I); \t \t сон (4); \t \t \t \t \t } –

+0

Почему вы хотите, чтобы приостановить выполнение в течение двух, или любое число, секунды? –

+1

Вы можете отредактировать свой вопрос, чтобы исправить исходный код. – knuton

ответ

14

Вы можете использовать setTimeout сделать это

function myFunction() 
    { 
    // your code 

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

Там нет (безопасный) способ приостановки выполнения. Вы можете, однако, сделать что-то вроде этого, используя setTimeout:

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

    if(i == 5) 
     return; 

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

    }, 2000); 
} 

writeNext(1); 
+13

Почему downvote? –

+4

Почему document.write() он испортит DOM –

+33

@ManuViswam Это не мой document.write, это код из вопроса. –

2

This Link может быть полезным для вас.

Каждый раз, когда мне хотелось поспать посреди моей функции, я реорганизовал использовать setTimeout().

2

Невозможно остановить выполнение кода, как это было бы с процедурным языком. Вы можете вместо этого использовать SetTimeout и некоторые хитрости, чтобы получить параметризованный таймаут:

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

Демо здесь: http://jsfiddle.net/hW7Ch/

84

Javascript является однопоточным, так по своей природе не должна быть функцией сна, потому что спать будет блокировать поток. setTimeout - это способ обойти это, отправив событие в очередь, которая будет выполнена позже, без блокировки потока. Но если вы хотите истинную функцию сна, вы можете написать что-то вроде этого:

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

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

** DONT LIKE THAT !!! ** Это заставляет замораживать WHOLE TAB (также другие затронутые вкладки) в течение этого времени, потому что команда 'while' запускается неограниченное время CPU, что приводит к остановке. См. Практический пример - https://jsfiddle.net/mn6yagqx/ (проверьте себя) –

+0

@ T.Todua: Вот почему сообщение не рекомендовал его. Это всего лишь обходной путь, если люди все равно захотят это сделать –

Смежные вопросы