Вызов функции каждые 60 секунд


используя setTimeout() можно запустить функцию в заданное время:

setTimeout(function, 60000);

но что, если я хотел бы запустить функцию несколько раз? Каждый раз, когда проходит временной интервал, я хотел бы выполнить функцию (скажем, каждые 60 секунд).

8 189

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>
setInterval(fn,time)

Это метод, который вы ищете.

использовать window.setInterval(func, time).

вы можете просто вызвать setTimeout в конце функции. Это добавит его снова в очередь событий. Вы можете использовать любую логику для изменения значений задержки. Например,

function multiStep() {
  // do some work here
  blah_blah_whatever();
  var newtime = 60000;
  if (!requestStop) {
    setTimeout(multiStep, newtime);
  }
}

есть 2 способа вызова-

  1. setInterval(function (){ functionName();}, 60000);

  2. setInterval(functionName, 60000);

выше функция будет вызывать каждые 60 секунд.