Вызов функции каждые 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); } }