有没有办法在JavaScript中定期调用函数?
2022-08-30 02:26:18
有没有办法在JavaScript中定期调用函数?
该方法重复调用函数或执行代码片段,每次调用之间具有固定的时间延迟。它返回一个唯一标识间隔的间隔 ID,因此您可以稍后通过调用 clearInterval() 将其删除。
setInterval()
var intervalId = setInterval(function() {
alert("Interval reached every 5s")
}, 5000);
// You can clear a periodic function by uncommenting:
// clearInterval(intervalId);
查看更多 @ setInterval() @ MDN Web Docs
请注意,setInterval() 通常不是定期执行的最佳解决方案 - 它实际上取决于您实际定期调用的javascript。
例如。如果您使用周期为 1000ms 的 setInterval(),并且在周期函数中,您进行了一个 ajax 调用,该调用偶尔需要 2 秒才能返回,您将在第一个响应返回之前进行另一个 ajax 调用。这通常是不可取的。
许多库都有定期的方法,可以防止天真地使用setInterval的陷阱,例如Nelson给出的原型示例。
要使用包含 jQuery ajax 调用的函数实现更健壮的定期执行,请考虑如下操作:
function myPeriodicMethod() {
$.ajax({
url: ...,
success: function(data) {
...
},
complete: function() {
// schedule the next request *only* when the current one is complete:
setTimeout(myPeriodicMethod, 1000);
}
});
}
// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);
另一种方法是使用 setTimeout,但在变量中跟踪经过的时间,然后动态设置每个调用的超时延迟,以尽可能接近所需的间隔执行函数,但永远不会快于您获得响应的速度。