Za pomocą setTimeout() można uruchomić funkcję w określonym czasie:
setTimeout(function,60000);
Ale co jeśli chciałbym uruchomić tę funkcję wiele razy? Za każdym razem, gdy mija przedział czasu, chciałbym wykonać tę funkcję (powiedzmy co 60 sekund).
Jeśli nie obchodzi Cię, czy kod w ciągu timermoże potrwać dłużej niż interwał, użyj setInterval():
setInterval(function, delay)
To uruchamia funkcję przekazywaną jako pierwszy parametr w kółko.
Lepszym rozwiązaniem jest użycie setTimeoutwraz z self-executing anonymousfunkcją:
(function(){// do some stuff
setTimeout(arguments.callee,60000);})();
gwarantuje to, że następne wywołanie nie zostanie wykonane przed wykonaniem kodu. Użyłem arguments.calleew tym przykładzie jako odwołania do funkcji. Jest to lepszy sposób na nadanie funkcji nazwy i wywołanie jej w środku, setTimeoutponieważ arguments.calleejest to przestarzałe w ecmascript 5.
Nie można wykonać następnego wywołania przed zakończeniem wykonywania kodu. Czasomierz odlicza się asynchronicznie, ale wywołanie zwrotne musi być ustawione w kolejce. Oznacza to, że Twoje oddzwonienie może (i prawdopodobnie) zadziała po ponad 60 sekundach.
Różnica polega na tym, że setInterval będzie generalnie uruchomić funkcję X milisekund po starcie poprzedniej iteracji, natomiast podejście tutaj będzie działać następnej iteracji x milisekund po poprzedni zakończył
Podobnie jak uwaga dla innych, którzy mogą to znaleźć - clearInterval()jest funkcją partnera setInterval()i przydaje się, jeśli chcesz przerwać okresowe wywoływanie funkcji.
Uwaga: setInterval wykonuje tę funkcję po raz pierwszy po opóźnieniu ms. Więc jeśli chcesz natychmiast wykonać funkcję, a następnie powtarzać każde opóźnienie, powinieneś: func (); setInterval (func, delay);
Zgodnie z komentarzem, aktualizowanie go pod kątem zdolności przekazanej funkcji do zatrzymania odpytywania:
function pollFunc(fn, timeout, interval){var startTime =(newDate()).getTime();
interval = interval ||1000,
canPoll =true;(function p(){
canPoll =((newDate).getTime()- startTime )<= timeout;if(!fn()&& canPoll){// ensures the function exucutes
setTimeout(p, interval);}})();}
pollFunc(sendHeartBeat,60000,1000);function sendHeartBeat(params){......if(receivedData){// no need to execute furtherreturntrue;// or false, change the IIFE inside condition accordingly.}}
Dobra odpowiedź. Czy możesz zaktualizować jedno z zastosowań nowej daty, aby były spójne, jedno używa (nowej daty) .getTime (), a drugie (nowej daty ()). GetTime (). Oba wydają się działać dobrze
function random_no(){var ran=Math.random();
jQuery('#random_no_container').html(ran);}
window.setInterval(function(){/// call your function here
random_no();},6000);// Change Interval here to test. For eg: 5000 for 5 sec
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><divid="random_no_container">
Hello. Here you can see random numbers after every 6 sec
</div>
Możesz po prostu wywołać setTimeout na końcu funkcji. Spowoduje to dodanie go ponownie do kolejki zdarzeń. Możesz użyć dowolnego rodzaju logiki do zmiany wartości opóźnienia. Na przykład,
function multiStep(){// do some work here
blah_blah_whatever();var newtime =60000;if(!requestStop){
setTimeout(multiStep, newtime);}}
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.