Odpowiedzi:
Chcesz setInterval()
:
var intervalID = setInterval(function(){alert("Interval reached");}, 5000);
Pierwszym parametrem do setInterval () może być również ciąg kodu do oceny.
Możesz wyczyścić funkcję okresową za pomocą:
clearInterval(intervalID);
setInterval()
to poprawna odpowiedź na pytanie, bez względu na parametr. To tylko przykład, a obie metody są z definicji poprawne.
Pamiętaj, że metoda setInterval () często nie jest najlepszym rozwiązaniem do okresowego wykonywania - to naprawdę zależy od tego, jaki javascript faktycznie wywołujesz okresowo.
na przykład. Jeśli używasz setInterval () z okresem 1000 ms iw funkcji okresowej wykonujesz wywołanie Ajax, które czasami zajmuje 2 sekundy, będziesz wykonywać kolejne wywołanie Ajax, zanim wróci pierwsza odpowiedź. Zwykle jest to niepożądane.
Wiele bibliotek ma okresowe metody, które chronią przed pułapkami wynikającymi z naiwnego używania setInterval, na przykład przykład Prototype podany przez Nelsona.
Aby uzyskać bardziej niezawodne wykonywanie okresowe z funkcją, która zawiera wywołanie jQuery ajax, rozważ coś takiego:
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);
Innym podejściem jest użycie setTimeout, ale śledzenie czasu, który upłynął w zmiennej, a następnie dynamiczne ustawianie opóźnienia limitu czasu przy każdym wywołaniu, aby wykonać funkcję tak blisko żądanego interwału, jak to możliwe, ale nigdy szybciej niż można uzyskać odpowiedzi.
Każdy ma już rozwiązanie setTimeout / setInterval. Myślę, że ważne jest, aby pamiętać, że możesz przekazywać funkcje do setInterval, a nie tylko ciągi znaków. W rzeczywistości prawdopodobnie jest trochę „bezpieczniejsze” przekazywanie rzeczywistych funkcji zamiast ciągów, które będą „oceniane” do tych funkcji.
// example 1
function test() {
alert('called');
}
var interval = setInterval(test, 10000);
Lub:
// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);
Stare pytanie, ale ... potrzebowałem też okresowego programu do uruchamiania zadań i napisałem TaskTimer . Jest to również przydatne, gdy musisz uruchomić wiele zadań w różnych odstępach czasu.
// 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
działa zarówno w przeglądarce, jak iw Node. Zobacz dokumentację dla wszystkich funkcji.
Będziesz chciał rzucić okiem na setInterval () i setTimeout ().
tak - przyjrzyj się setInterval
isetTimeout
wykonaj kod w określonych momentach. setInterval będzie tym, który będzie używany do okresowego wykonywania kodu.
Zobacz demo i odpowiedz tutaj na użytkowanie
Ponieważ chcesz, aby funkcja była wykonywana okresowo , użyj setInterval
Natywny sposób to rzeczywiście setInterval()
/ clearInterval()
, ale jeśli korzystasz już z biblioteki Prototype , możesz skorzystać z PeriodicalExecutor:
new PeriodicalUpdator(myEvent, seconds);
Zapobiega to nakładaniu się połączeń. Od http://www.prototypejs.org/api/periodicalExecuter :
„chroni Cię przed wieloma równoległymi wykonaniami funkcji zwrotnej, jeśli wykonanie tej funkcji potrwa dłużej niż określony interwał (utrzymuje wewnętrzną flagę„ uruchomiona ”, która jest chroniona przed wyjątkami w funkcji wywołania zwrotnego). Jest to szczególnie przydatne, jeśli użyj jednego do interakcji z użytkownikiem w określonych odstępach czasu (np. użyj zachęty lub potwierdź połączenie): pozwoli to uniknąć wielu okien wiadomości czekających na działanie. "