Что такое JavaScript-версия sleep ()? - PullRequest
1903 голосов
/ 04 июня 2009

Есть ли лучший способ создать sleep в JavaScript, чем следующая pausecomp функция ( взято отсюда )?

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;
    do { curDate = new Date(); }
    while(curDate-date < millis);
}

Это не дубликат Сон в JavaScript - задержка между действиями ; Мне нужен реальный сон в середине функции, а не задержка перед выполнением фрагмента кода.

Ответы [ 73 ]

0 голосов
/ 15 октября 2013

Я использую многопоточный HTML5 Worker, который сможет прервать синхронный запрос XMLHttpRequest, указывающий на не отвечающий URL. Это не блокирует браузер.

https://gist.github.com/el-gringo/6990785

0 голосов
/ 01 ноября 2012

Хорошей альтернативой в некоторых ситуациях является отображение панели сообщений верхнего уровня, чтобы остановить взаимодействие с пользователем, а затем скрытие ее снова, когда вы получите ожидаемый результат (асинхронно). Это позволяет браузеру выполнять фоновые задачи, но приостанавливает рабочий процесс, пока вы не вернете свой результат.

0 голосов
/ 26 ноября 2014

У меня недавно был случай, когда код после обратного вызова выполнялся до выполнения обратного вызова $.ui.popup. Мое решение состояло в том, чтобы установить переменную перед рукой, названной pause, установить ее в true, выполнить код $.ui.popup, а затем получить код, который мне нужно было ждать через определенный интервал. Пример:

var pause = false;
function something() {
    if(edited && renamed) {
        pause = true;
        $.ui.popup({
            //...
            doneCallback: function() {
                //...
                pause = false;
            }
            //...
        });
        //...
    }

    var waitCode = setInterval(function(){
        if(!pause) {
            //... code I needed to wait on ...
            clearInterval(waitCode);
        }
    },500);
}
...