Вызов функции каждые 60 секунд
используя setTimeout()
можно запустить функцию в заданное время:
setTimeout(function, 60000);
но что, если я хотел бы запустить функцию несколько раз? Каждый раз, когда проходит временной интервал, я хотел бы выполнить функцию (скажем, каждые 60 секунд).
8 ответов:
Если вам все равно, если код внутри
timer
может занять больше времени, чем интервал, используйтеsetInterval()
:setInterval(function, delay)
это запускает функцию, переданную в качестве первого параметра снова и снова.
лучший подход, чтобы использовать
setTimeout
вместе сself-executing anonymous
функция:(function(){ // do some stuff setTimeout(arguments.callee, 60000); })();
это гарантирует, что следующий вызов не будет выполнен до выполнения вашего кода. Я использовал
arguments.callee
в этом примере в качестве ссылки на функцию. Это лучший способ, чтобы дать функцию имя и назвать, что внутриsetTimeout
, потому чтоarguments.callee
является устаревшим в ecmascript 5.
использовать
setInterval(function, 60000);
EDIT : (в случае, если вы хотите остановить часы после его запуска)
раздел скрипт
<script> var int=self.setInterval(function, 60000); </script>
и HTML-код
<!-- Stop Button --> <a href="#" onclick="window.clearInterval(int);return false;">Stop</a>
лучше использовать jAndy ' s ответ для реализации функции опроса, которая опрашивает каждый
interval
секунд, и заканчивается послеtimeout
секунд.function pollFunc(fn, timeout, interval) { var startTime = (new Date()).getTime(); interval = interval || 1000; (function p() { fn(); if (((new Date).getTime() - startTime ) <= timeout) { setTimeout(p, interval); } })(); } pollFunc(sendHeartBeat, 60000, 1000);
обновление
согласно комментарию, обновляя его для возможности переданной функции остановить опрос:
function pollFunc(fn, timeout, interval) { var startTime = (new Date()).getTime(); interval = interval || 1000, canPoll = true; (function p() { canPoll = ((new Date).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 further return true; // or false, change the IIFE inside condition accordingly. } }
в jQuery вы можете сделать такой.
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
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="random_no_container"> Hello. Here you can see random numbers after every 6 sec </div>
использовать
window.setInterval(func, time)
.
вы можете просто вызвать setTimeout в конце функции. Это добавит его снова в очередь событий. Вы можете использовать любую логику для изменения значений задержки. Например,
function multiStep() { // do some work here blah_blah_whatever(); var newtime = 60000; if (!requestStop) { setTimeout(multiStep, newtime); } }