Вопрос по delay, sleep, wait, jquery, javascript – JavaScript спать / ждать, прежде чем продолжить [дублировать]

244

На этот вопрос уже есть ответ здесь:

Что такое JavaScript-версия sleep ()? 71 ответ

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

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

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

setTimeout

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

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

function sleep (_ms = 0) {var _start = new Date (). getTime (); while (_ms> (новая дата (). getTime () - _start)) {}} Sandro Rosa
Код будетsetTimeout(function(){ alert('time is up')},time); (вместо\` line and the под строкой оповещения) время указывается в миллисекундахdeveloper.mozilla.org/en-US/docs/Web/API/window.setTimeout Benjamin Gruenbaum
Спасибо всем. Можно ли сделать функцию sleepNow (время), которую вы можете вызывать в скрипте, например, sleepNow (5000), чтобы спать 5 секунд? user2370460
По какой причине вам пришлось бы ждать сценария? A. Wolff

Ваш Ответ

1   ответ
473

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

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

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

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

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

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

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

HELLO
DOG
THIS IS

(Обратите внимание, чтоСОБАКА печатается раньшеЭТО)


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

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/

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

-1 Ужасно, что это начинается с функции сна, которая является занятой петлей. Страшно, что у 30 человек +1д это. Я надеюсь, что будущие читатели прочитают пример setTimeout, который был добавлен год спустя. ToolmakerSteve
Он зависает браузер, и если вы делаетеsleep более 10 секунд, браузер показывает предупреждение:.A script on this page may be busy, or it may have stopped responding. You can stop the script now, open the script in the debugger, or let the script continue. Ikrom
setTimeout() включает в себя обратные вызовы, что означает, что это асинхронный. ОП запросил что-то, что останавливается, что является синхронным и вызывает прерывание. Ilan Biala
Было бы неплохо назвать метод "blockingSleep», чтобы избежать соблазна людей использовать его в неправильном контексте. Немного похоже на response.js ' dangerouslySetInnerHTML. Nicola Marcacci Rossi

Похожие вопросы