Вызов функции каждые 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
в этом примере в качестве ссылки на функцию. Это лучший способ дать функции a назовите и назовите это в 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>
вы можете просто вызвать setTimeout в конце функции. Это добавит его снова в очередь событий. Для изменения значений задержки можно использовать любую логику. Например,
function multiStep() {
// do some work here
blah_blah_whatever();
var newtime = 60000;
if (!requestStop) {
setTimeout(multiStep, newtime);
}
}
есть 2 способа вызова-
setInterval(function (){ functionName();}, 60000);
setInterval(functionName, 60000);
над функцией вызовет дальше каждые 60 секунд.