javascript - setInterval 在前 5 次迭代后不起作用
问题描述
我试图让 cron 函数每隔randomInterval
几秒运行一次。
我更改setInterval(cron(), randomInterval);
为setInterval(cron, randomInterval);
删除最大调用堆栈错误。但这仍然不能作为一个可靠的 cron。在前 5 次迭代之后,它将执行 cron 函数而不设置时间间隔。
任何帮助,将不胜感激!!!
function cron() {
randomInterval = randomIntFromInterval(1000, 9000);
cronInterval = setInterval(cron, randomInterval);
}
function randomIntFromInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
cron();
下面的代码让测试记录了时间间隔以及 cron 触发的时间。
function cron() {
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
h = (h < 10) ? "0" + h : h;
m = (m < 10) ? "0" + m : m;
console.log(h + ":" + m + "took screenshot ");
randomInterval = randomIntFromInterval(1000, 9000);
cronInterval = setInterval(cron, randomInterval);
console.log(randomInterval/1000);
}
function randomIntFromInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
cron()
解决方案
您正在使用 setInterval ,它将在每(任意数)N 毫秒后继续执行相同的 cron 函数。如果您想实现类似 cron 的功能,请使用 setTimeout 而不是 setInterval。因为 setInterval 会很快用很多回调函数填满你的事件队列,你最终会得到堆栈溢出或内存溢出类型的错误。
setInterval 永远不会停止调用回调,直到你让它停止。您的代码正在做的是用大量回调填充事件队列,这会造成问题。
function cron() {
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();
h = (h < 10) ? "0" + h : h;
m = (m < 10) ? "0" + m : m;
console.log(h + ":" + m + "took screenshot ");
randomInterval = randomIntFromInterval(1000, 9000);
cronInterval = setTimeout(cron, randomInterval); // Here change it to setTimeout
console.log(randomInterval/1000);
}
function randomIntFromInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
cron()
推荐阅读
- css - 无法摆脱右边的填充
- python-3.x - Python not working after installing numpy
- windows - How to delete registry entry with batch command?
- powerbi - 每月单独计算的 YTD 度量
- javascript - react-native 导航返回时重新运行功能
- javascript - Conflict on JS files after combining Material Design Lite and Bootstrap 4
- r - 可以将前一行值按两个不同的列分组吗?
- python - django 模型 - 检查具有匹配属性的模型是否已存在于数据库中的实例方法
- java - Android:ZipFile() java.util.zip.ZipException:文件太短而不能成为 zip 文件:0
- javascript - Do implementations of the Web Audio API tend to make full use of available CPU cores?