Что эквивалентно 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);
    }