Відповіді:
Ви хочете setInterval()
:
var intervalID = setInterval(function(){alert("Interval reached");}, 5000);
Перший параметр setInterval () також може бути рядком коду, який слід оцінити.
Ви можете очистити періодичну функцію за допомогою:
clearInterval(intervalID);
setInterval()
це правильна відповідь на питання, незалежно від параметра. Це лише приклад, і обидва методи за визначенням правильні.
Зауважте, що setInterval () часто не є найкращим рішенням для періодичного виконання - Це дійсно залежить від того, який JavaScript ви насправді періодично дзвоните.
напр. Якщо ви використовуєте setInterval () з періодом 1000 мс і в періодичній функції ви здійснюєте ajax-дзвінок, який час від часу займає 2 секунди, щоб повернутися, ви будете робити ще один ajax-дзвінок, перш ніж повернеться перша відповідь. Зазвичай це небажано.
У багатьох бібліотеках є періодичні методи, що захищають від підводних каменів використання setInterval наївно, наприклад приклад прототипу, наданий Нельсоном.
Щоб досягти більш надійного періодичного виконання за допомогою функції, яка містить в собі jQuery ajax, подумайте про щось подібне:
function myPeriodicMethod() {
$.ajax({
url: ...,
success: function(data) {
...
},
complete: function() {
// schedule the next request *only* when the current one is complete:
setTimeout(myPeriodicMethod, 1000);
}
});
}
// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);
Інший підхід полягає у використанні setTimeout, але відслідковуйте минулий час у змінній, а потім динамічно встановлюйте затримку часу на кожному виклику, щоб виконати функцію якомога ближче до потрібного інтервалу, але ніколи швидше, ніж ви зможете отримати відповіді.
У кожного вже є рішення setTimeout / setInterval. Я думаю, що важливо зазначити, що ви можете передавати функції setInterval, а не лише рядки. Насправді, мабуть, трохи "безпечніше" передавати реальні функції замість рядків, які будуть "ухилятися" від цих функцій.
// example 1
function test() {
alert('called');
}
var interval = setInterval(test, 10000);
Або:
// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);
Старе питання, але .. мені також потрібен був періодичний виконавець завдань і написав TaskTimer . Це також корисно, коли потрібно запускати кілька завдань через різні проміжки часу.
// Timer with 1000ms (1 second) base interval resolution.
var timer = new TaskTimer(1000)
// Add task(s) based on tick intervals.
timer.addTask({
name: 'job1', // unique name of the task
tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms)
totalRuns: 10, // run 10 times only. (set to 0 for unlimited times)
callback: function (task) {
// code to be executed on each run
console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
}
});
// Start the timer
timer.start();
TaskTimer
працює як у браузері, так і в Node. Дивіться документацію щодо всіх функцій.
Ви хочете подивитися на setInterval () та setTimeout ().
Ось гідна стаття підручника .
так - погляньте setInterval
іsetTimeout
код у певний час. setInterval буде тим, хто використовує для періодичного виконання коду.
Дивіться демонстрацію та відповідь тут щодо використання
Оскільки ви хочете, щоб функція виконувалась періодично , використовуйте setInterval
Народний спосіб справді setInterval()
/ clearInterval()
, але якщо ви вже використовуєте бібліотеку прототипів, ви можете скористатися PeriodicalExecutor:
new PeriodicalUpdator(myEvent, seconds);
Це запобігає перекриття дзвінків. Від http://www.prototypejs.org/api/periodicalExecuter :
"це захищає вас від декількох паралельних виконання функції зворотного дзвінка, якщо це займе більше часу, ніж заданий інтервал (він підтримує внутрішній прапор" запущений ", захищений від винятків у функції зворотного виклику). Це особливо корисно, якщо ви використовувати один, щоб взаємодіяти з користувачем через задані інтервали (наприклад, використовувати підказку або підтвердити дзвінок): це дозволить уникнути декількох ящиків повідомлень, які очікують дії. "