2013-03-29 2 views
10

Я хочу создать функцию ожидания javascript. что я должен редактировать?Javascript wait() function

function wait(waitsecs){ 
setTimeout(donothing(), 'waitsecs'); 
} 

function donothing() { 

} 
+0

Вы, вероятно, имели в виду 'setTimeout (donothing(), waitsecs);' но я не понимаю, в чем суть этого. 'setTimeout' не блокируется, и вы не должны создавать отсрочку ожидания. http://stackoverflow.com/q/951021/139010 –

+0

Лучше вопрос * почему * вы хотите иметь функцию 'wait'? –

+0

Этот код вызывает donothing * немедленно * и передает строку, а не значение параметра. 'setTimeout (donothing, waitsecs)' будет лучшей попыткой ... глупой оберткой. – 2013-03-29 00:30:03

ответ

38

Javascript не заправлен, поэтому «ожидание» заморозит всю страницу (и, вероятно, заставит браузер полностью прекратить выполнение скрипта).

Чтобы конкретно решить вашу проблему, вы должны удалить скобки после donothing в вашем setTimeout вызова и сделать waitsecs число которых не строку:

console.log('before'); 
setTimeout(donothing,500); // run donothing after 0.5 seconds 
console.log('after'); 

Но это не остановит исполнение; «after» будет регистрироваться до запуска вашей функции.

Ждать правильно, вы можете использовать анонимные функции:

console.log('before'); 
setTimeout(function(){ 
    console.log('after'); 
},500); 

Все ваши переменные будут по-прежнему есть в разделе «после». Вы не должны их связывать - если вам нужно, вам нужно посмотреть, как вы структурируете программу. Также вы можете использовать setInterval/clearInterval, если это необходимо для цикла.

+1

какой простой код! :) –

4

Не следует изменять его, вы должны полностью отказаться от него.

Любая попытка остановки выполнения в течение определенного времени блокирует браузер и переключает его в состояние «Не отвечает». Единственное, что вы можете сделать, это правильно использовать setTimeout.

+0

+1 это лучший ответ. – Sajmon

+14

Я думаю [ответ Дэйва] (http://stackoverflow.com/a/15694534/53926) лучше. Меньше snark более реальные советы. – Xavi