JavaScript сон/ожидание перед продолжением

У меня есть код JavaScript, который должен добавить функцию sleep/wait. Код, который я запускаю, уже находится в функции, например:

function myFunction(time)
{
    alert('time starts now');
    //code to make the program wait before continuing
    alert('time is up')
}

Я слышал, что возможное решение может включать

setTimeout

но я не уверен, как его использовать в этом случае.

Я не могу использовать PHP, поскольку мой сервер не поддерживает его, хотя использование jQuery будет в порядке.

Ответ 1

JS не имеет функции сна, он имеет setTimeout() или setInterval().

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

//code before the pause
setTimeout(function(){
    //do what you need here
}, 2000);

см. пример здесь: http://jsfiddle.net/9LZQp/

Это не остановит выполнение вашего script, но пока setTimeout() является асинхронной функцией, этот код

console.log("HELLO");
setTimeout(function(){
    console.log("THIS IS");
}, 2000);
console.log("DOG");

напечатает это в консоли:

HELLO
DOG
THIS IS

(обратите внимание, что DOG печатается до ЭТО)


Вы можете использовать следующий код для симуляции сна в течение коротких периодов времени:

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

теперь, если вы хотите спать в течение 1 секунды, просто используйте:

sleep(1000);

пример: http://jsfiddle.net/HrJku/1/

обратите внимание, что этот код будет поддерживать ваш script занят за n миллисекунд. Это не только остановит выполнение Javascript на вашей странице, но, в зависимости от реализации браузера, возможно, страница полностью не отвечает на запросы и, возможно, сделает весь браузер неактивным. Другими словами, это почти всегда неправильно.