2015-11-20 2 views
1

У меня есть цикл while в JS. Он пытается что-то сделать, и если он не работает, я хочу, чтобы он вычислил время, которое ему нужно будет ждать, а затем повторить.JavaScript: Подождите n секунд до продолжения в цикле

while (makeSomething() == false) { 
    var wait = a + b + c; 
    sleep(wait); 
} 

Я знаю только SetTimeout(), но, как вы знаете, что не ведет себя, как я хочу, чтобы это сделать.

Если jQuery предлагает решение для этого, все будет хорошо.

+1

Использование '' setInterval' или setTimeout' – Tushar

+0

Вы должны изменить логику не использовать в то время цикла .... – epascarello

+0

JS не имеет такой функции. Вы должны избавиться от 'while', если хотите использовать функцию ожидания. – hindmost

ответ

3

Вы должны изменить, как работает ваша логика. Вероятно, вам нужно разбить свой код. Основная идея того, что вы хотите сделать:

function waitForIt(){ 
    if(makeSomething() == false) { 
     var wait = a + b + c; 
     window.setTimeout(waitForIt, wait); 
    } else { 
     console.log("do next step"); 
    } 
} 
waitForIt(); 
+0

Как будут выходить из строя тайм-ауты? ? Только один запускается, и когда проверка происходит, другой запускается ... – epascarello

-1

Это зависит от вашего намерения здесь. Из вашего вопроса, кажется, вы хотите остаться в цикле while, пока makeSomething() не будет истинным. Ответ epascarello продолжит выполнение потока, потому что он использует setTimeout().

Технически его ответ значительно лучше, потому что он не повесил приложение. Но если вы действительно хотите функцию сна, которая остановит все приложения обработки вы можете использовать эту функцию:

function sleepFor(sleepDuration) { 
     var now = new Date().getTime(); 
     while(new Date().getTime() < now + sleepDuration){ /* do nothing */ } 
    } 

Обратите внимание, что это вообще плохая практика, пользователь не сможет взаимодействовать с приложением в то время как поток спит.

Собранная из: What is the JavaScript version of sleep()?

+0

это действительно кажется единственной возможностью, спасибо – Cutaraca

+0

Добро пожаловать. Я был бы признателен, если бы вы могли пометить мой ответ как правильный, если бы вы так думали. – Ravvy

+0

To downvoters: Я был бы благодарен за любые отзывы или критику, которые я могу узнать или использовать, чтобы помочь мне улучшить мой ответ. – Ravvy

Смежные вопросы