Вызов функции каждые 60 секунд
Используя setTimeout()
, можно запустить функцию в указанное время:
setTimeout(function, 60000);
Но что, если я хотел бы запустить функцию несколько раз? Каждый раз, когда проходит промежуток времени, я хотел бы выполнить функцию (каждые 60 секунд, скажем).
Ответы
Ответ 1
Если вам все равно, если код в timer
может занять больше времени, чем ваш интервал, используйте setInterval()
:
setInterval(function, delay)
Это снова и снова запускает функцию, переданную в качестве первого параметра.
Лучшим подходом является использование setTimeout
вместе с функцией self-executing anonymous
:
(function(){
// do some stuff
setTimeout(arguments.callee, 60000);
})();
который гарантирует, что следующий вызов не будет выполнен до того, как ваш код будет выполнен. Я использовал arguments.callee
в этом примере как ссылку на функцию. Это лучший способ присвоить функции имя и вызвать его в setTimeout
, потому что arguments.callee
устарел в ecmascript 5.
Ответ 2
используйте
setInterval(function, 60000);
EDIT: (Если вы хотите остановить часы после их запуска)
Script раздел
<script>
var int=self.setInterval(function, 60000);
</script>
и код HTML
<!-- Stop Button -->
<a href="#" onclick="window.clearInterval(int);return false;">Stop</a>
Ответ 3
Лучшее использование jAndy answer для проведения опроса функция, которая проверяет каждые 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);
UPDATE
В соответствии с комментарием, обновив его для возможности переданной функции остановить опрос:
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.
}
}
Ответ 4
В 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>
Ответ 5
setInterval(fn,time)
- метод, которым вы пользуетесь.
Ответ 6
Используйте window.setInterval(func, time)
.
Ответ 7
Вы можете просто вызвать setTimeout в конце функции. Это добавит его снова в очередь событий. Вы можете использовать любую логику для изменения значений задержки. Например,
function multiStep() {
// do some work here
blah_blah_whatever();
var newtime = 60000;
if (!requestStop) {
setTimeout(multiStep, newtime);
}
}
Ответ 8
// example:
// checkEach(1000, () => {
// if(!canIDoWorkNow()) {
// return true // try again after 1 second
// }
//
// doWork()
// })
export function checkEach(milliseconds, fn) {
const timer = setInterval(
() => {
try {
const retry = fn()
if (retry !== true) {
clearInterval(timer)
}
} catch (e) {
clearInterval(timer)
throw e
}
},
milliseconds
)
}
Ответ 9
Есть два способа вызова -
-
setInterval(function (){ functionName();}, 60000);
-
setInterval(functionName, 60000);
функция будет вызываться каждые 60 секунд.
Ответ 10
здесь мы поддерживаем натуральные числа от 0 до...... n (следующая цифра печатается в консоли каждые 60 секунд), используя setInterval()
var count = 0;
function abc(){
count ++;
console.log(count);
}
setInterval(abc,60*1000);
Ответ 11
(function(sec){
setInterval(function(){
// your function here
}, sec * 1000);
})(60);