2013-10-07 5 views
2

У меня есть функция, которую я бы хотел вызвать сразу, а затем используйте setInterval для обновления каждые десять секунд.Вызов функции один раз, затем setInterval

В настоящее время я использую что-то вроде

myFunction(); 
setInterval(function(){ 
myFunction(); 
}, 10000); 

есть лучший способ сделать это? Я чувствую, что должен быть способ сообщить setInterval стрелять по вызову, но я не могу ничего найти на нем.

+3

Кажется логичным для меня. –

+6

Если эта функция не имеет параметров, вы можете передать ее с помощью 'setInterval (myFunc, 100000);' кроме этого, выглядит отлично. – tymeJV

+1

Я использую этот язык с 2007 года, и я думаю, что это единственный способ сделать это. Вот как работает 'setInterval'. –

ответ

4

Это не какие-либо «лучше», но это не то, что вы хотите с меньшим количеством строк:

myFunction(); 
setInterval(myFunction, 10000); 
1

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

function myFunction() { 
    // do stuff 
    setTimeout(myFunction, 10000); 
} 
myFunction(); 

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

+2

Хотя это не делает * точно * то же самое, что и 'setInterval' (особенно в зависимости от того, что на самом деле означает' // do stuff') – Ian

+0

Nope. Это сильно отличается от 'setInterval', особенно между браузерами. –

+1

Добавлена ​​заметка об этом. – bfavaretto

2

Если вернуть функцию внутри функции, вы можете использовать небольшой хак, как это:

function foo() { 
    alert('hi'); 
    return foo; 
} 

// no need to call it before setting the interval 
window.setInterval(foo() , 3000); 

немедленно Он выполняет, и так как функция возвращает себя, он продолжает идти.

jsFiddle example

+1

Довольно крутая идея. Будем надеяться, что перед «возвратом» нет исключений, иначе он не будет действовать, как исходный код OP – Ian

+2

Это больно глазам. Это почти так же плохо, как 'setInterval ((foo(), foo), 3000)', который [работает тоже] (http://jsfiddle.net/47Df8/), но так трудно читать ... – user123444555621

+0

Согласен. Это, в основном, единственный способ сделать то, что он просил. –

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