📅  最后修改于: 2023-12-03 15:38:42.380000             🧑  作者: Mango
在一些特定的场景中,需要每分钟调用一次函数,比如实时监控,定时任务等等。那么我们如何在颤动中能够实现每分钟调用一个函数呢?以下是几种实现方式:
function callFunction() {
// 要执行的函数
console.log('我每分钟都被调用了。');
// 每隔一分钟调用一次
setTimeout(callFunction, 60 * 1000);
}
// 初次执行
callFunction();
上述代码通过使用setTimeout
函数实现了每隔一分钟调用一次callFunction
函数的目的,递归调用实现了不间断调用的效果。
// 计时器句柄
var timer;
function callFunction() {
// 要执行的函数
console.log('我每分钟都被调用了。');
}
// 初次执行
timer = setInterval(callFunction, 60 * 1000);
上述代码通过使用setInterval
函数实现了每隔一分钟调用一次callFunction
函数的目的,setInterval
会返回一个计时器句柄,通过取消该句柄可以取消计时器。但是需要注意的是,setInterval
函数可能会由于某些原因导致调用不准确,比如浏览器再后台运行等。
function callFunction() {
// 要执行的函数
console.log('我每分钟都被调用了。');
}
// 初始时间
var currentTime = new Date().getTime();
function loop() {
// 当前时间
var now = new Date().getTime();
// 如果已经到了下一分钟
if (now - currentTime > 60 * 1000) {
callFunction();
// 更新当前时间
currentTime = now;
}
// 不断递归循环
requestAnimationFrame(loop);
}
// 初次执行
loop();
上述代码使用Date
对象来判断下一分钟是否已经到来,通过不断循环的方式在requestAnimationFrame
回调中实现了每分钟调用一次callFunction
函数的目的。需要注意的是,requestAnimationFrame
会在浏览器渲染下一帧之前调用回调函数,如果浏览器在后台运行,该方法可能不准确。
综上所述,实现每分钟调用一个函数可以使用setTimeout
函数、setInterval
函数或者通过循环requestAnimationFrame
回调实现。根据具体场景可以选择最适合的方式来实现。