2015-05-20 2 views
-1

Я делаю поиск корова, и у меня есть функция ожидания работы, но она игнорирует код перед тем как это сделать.Javascript wait not working

function pausecomp(ms) { 
    ms += new Date().getTime(); 
    while (new Date() < ms){} 
} 

function newRound() { 
    document.getElementById("duck").style.opacity = "1"; 
    score++; 
    document.getElementById("score").innerHTML = score; 
    pausecomp(1000); 
    document.getElementById("duck").style.opacity = "0"; 
    //lots more code that changes where it is... 
} 

утка остается на непрозрачности 0 (более вероятно, что это в непрозрачности 1 для доли секунды) и счет добавляется после pausecomp концов.

+3

Почему бы не просто использовать 'setTimeout'? – Mathletics

+0

Другим подходом было бы обернуть код, который вы хотите выполнить, через определенную продолжительность в 'setTimeout', чтобы код выполнялся после вашего периода ожидания. –

+1

Это не то, как параллелизм работает в JavaScript. Он основан на продолжении и не блокирует вызовы. –

ответ

0

комплектTimeout - это то, что вы хотите.

function newRound() { 
document.getElementById("duck").style.opacity = "1"; 
score++; 
document.getElementById("score").innerHTML = score; 
setTimeout(function(){document.getElementById("duck").style.opacity = "0"},1000); 
//lots more code that changes where it is... 
} 
+0

Утка движется, прежде чем снова станет невидимой. –

0

Вы должны это сделать, чтобы не блокировать ваш JS двигатель:

function newRound() { 
    document.getElementById("duck").style.opacity = "1"; 
    score++; 
    document.getElementById("score").innerHTML = score; 
    setTimeout(function() { 
     document.getElementById("duck").style.opacity = "0"; 
     //lots more code that changes where it is... 
    }, 1000); 
} 
+0

Утка движется, прежде чем снова станет невидимой. –

+0

Что в Божьем святом имени вы болтаете? – sebnukem

+0

Точно то, что я сказал. Предполагается, что утка должна быть видимой в течение 1 секунды, прежде чем двигаться. При этом утка движется, пока она видна, и становится невидимой. –

0

Вместо того, чтобы вызывать функцию, а просто позвонить pausecomp после 1000 мс с setTimeout.

function pausecomp(ms) { 
    document.getElementById("duck").style.opacity = "0"; 
    //lots more code that changes where it is... 
} 

function newRound() { 
    document.getElementById("duck").style.opacity = "1"; 
    score++; 
    document.getElementById("score").innerHTML = score; 
    setTimeout(pausecomp(), 1000); 
} 
+0

Прозрачность не меняется с этим. –