Что эквивалентно Java Thread.sleep()
в JavaScript?
Что эквивалентно Java Thread.sleep() в JavaScript?
Ответ 1
Простой ответ заключается в том, что такой функции нет.
Самое близкое, что у вас есть:
var millisecondsToWait = 500;
setTimeout(function() {
// Whatever you want to do after the wait
}, millisecondsToWait);
Обратите внимание, что вы особенно не хотите ожидать (например, в цикле вращения), так как ваш браузер почти наверняка выполняет ваш JavaScript в однопоточной среде.
Вот несколько других вопросов SO, которые касаются потоков в JavaScript:
И этот вопрос также может быть полезен:
Ответ 2
Попробуйте использовать этот код. Я надеюсь, что это будет полезно для вас.
function sleep(seconds)
{
var e = new Date().getTime() + (seconds * 1000);
while (new Date().getTime() <= e) {}
}
Ответ 3
Нет прямого эквивалента, поскольку он приостанавливает веб-страницу. Однако существует setTimeout(), например:
function doSomething() {
thing = thing + 1;
setTimeout(doSomething, 500);
}
Пример закрытия (спасибо Daniel):
function doSomething(val) {
thing = thing + 1;
setTimeout(function() { doSomething(val) }, 500);
}
Второй аргумент - миллисекунды перед запуском, вы можете использовать его для событий времени или ожидания перед выполнением операции.
Изменить: Обновлено на основе комментариев для более чистого результата.
Ответ 4
Вы можете написать цикл спина (цикл, который в течение длительного периода времени выполняет цикл, выполняющий какие-то вычисления для задержки функции) или используйте:
setTimeout("Func1()", 3000);
Это вызовет "Func1()" через 3 секунды.
Edit:
Кредит отправляется комментаторам, но вы можете передавать анонимные функции в setTimeout.
setTimeout(function() {
//Do some stuff here
}, 3000);
Это намного эффективнее и не вызывает функцию javascript eval.
Ответ 5
Предполагая, что вы можете использовать ECMAScript 2017, вы можете эмулировать подобное поведение, используя async/wait и setTimeout. Вот пример функции сна:
async function sleep(msec) {
return new Promise(resolve => setTimeout(resolve, msec));
}
Затем вы можете использовать функцию sleep в любой другой async-функции, например:
async function testSleep() {
console.log("Waiting for 1 second...");
await sleep(1000);
console.log("Waiting done."); // Called 1 second the first console.log
}
Это хорошо, потому что это позволяет избежать обратного вызова. Нижняя сторона заключается в том, что его можно использовать только в асинхронных функциях. За кулисами функция testSleep приостанавливается, и после завершения сна она возобновляется.
Из MDN:
Ожидающее выражение вызывает выполнение функции aync-функции для приостановки, пока Обещание выполнено или отклонено, и возобновить выполнение асинхронного после выполнения.
Подробное объяснение можно найти:
Ответ 6
setTimeout не будет удерживаться и возобновляться в вашем собственном потоке, но Thread.sleep делает. В Javascript нет фактического значения
Ответ 7
Или, может быть, вы можете использовать функцию setInterval для вызова определенной функции после указанного количества миллисекунд. Просто сделайте google для прототипа setInterval. Я не совсем его помню.
Ответ 8
В конечном итоге это помогло мне:
var x = 0;
var buttonText = 'LOADING';
$('#startbutton').click(function(){
$(this).text(buttonText);
window.setTimeout(addDotToButton,2000);
})
function addDotToButton(){
x++;
buttonText += '.';
$('#startbutton').text(buttonText);
if (x < 4) window.setTimeout(addDotToButton, 2000);
else location.reload(true);
}