我正在尝试使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()
答案 0 :(得分:0)
您正在使用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()