Подтвердить что ты не робот

Как приостановить выполнение JavaScript-кода в течение 2 секунд

Я хочу остановить исполнение на 2 секунды. Так и есть, но теперь следует блок кода:

<html>
   <head>
      <title> HW 10.12 </title>
      <script type="text/javascript">
         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 секунды. Я хочу остановить исполнение на две секунды?

4b9b3361

Ответ 1

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

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

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

Примечание: приведенный выше код НЕ рекомендуется.

Ответ 2

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

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

    if(i == 5)
        return;

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

    }, 2000);
}

writeNext(1);

Ответ 3

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

function myFunction() {
    // your code to run after the timeout
}

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

Ответ 4

Эта ссылка может быть вам полезна.

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

Ответ 5

Невозможно остановить выполнение кода, как это было бы с процедурным языком. Вместо этого вы можете использовать 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/