Как приостановить выполнение 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 секунды. Я хочу остановить исполнение на две секунды?
Ответы
Ответ 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/