JavaScript sleep/изчакване преди продължаване

Имам код в JavaScript, към който трябва да добавя функция за заспиване/изчакване. Кодът, който изпълнявам, вече е във функция, напр:

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

Чувал съм, че възможното решение може да включва

setTimeout

но не съм сигурен как да го използвам в този случай.

Не мога да използвам PHP, тъй като сървърът ми не го поддържа, въпреки че използването на jQuery би било добре.

Решение

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 на вашата страница, но в зависимост от имплементацията на браузъра може да направи страницата напълно неотзивчива и евентуално да направи целия браузър неотзивчив. С други думи, това почти винаги е погрешно.

Коментари (16)