Помогите разобраться с setTimeout

beejuice

Новичок
Помогите разобраться с setTimeout

Редко пишу на javascript и знаю, что плохо вызывать с помощью setTimeout функцию из самой себя, но более удобного решения пока не вижу.

Код такой:

function selectAction(poleKey){

nextAction = true;

...

if(nextAction) setTimeout(selectAction(poleKey), 1000);

}


Таймаута в одну секунду не происходит. Срабатывает сразу. Почему так?
 

x-yuri

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

Таймаута в одну секунду не происходит. Срабатывает сразу. Почему так?
потому что надо в setTimeout функцию передавать, а не undefined или что там у тебя
 

dimagolov

Новичок
x-yuri, тут все зависит от того, что нужно. Если нужно что-то делать каждую секунду и останавливаться по условию, то стоит делать setInterval а потом останавливать по clearInterval. Преимущество setInterval в том, что планировщик будет дернут только один раз, потом он будет работать на автомате.

beejuice, раз тебе нужно передать параметр в ф-ю, которая должна вызываться по setTimeout или setInterval, то нужно делать замыкание:
PHP:
function selectAction(poleKey){

nextAction = true;

...

if(nextAction) setTimeout(function () { selectAction(poleKey); }, 1000);
// без параметра было бы так:
if(nextAction) setTimeout(selectAction, 1000);

}
но обрати внимание на первую ремарку, возможно, setInterval будет уместнее.
 

beejuice

Новичок
dimagolov, Спасибо большое. setInterval не подходит, так как задержка будет "плавающая".
 
Сверху