[英]setInterval function every day, but pass a random integer to another function. So that function fires once every day at a random time
我觉得我很接近这个。 我想每 24 小时在一个随机点触发 function(出于测试目的,我只是尝试每 10 秒更新一次)。
这是我的 javascript:
let now = new Date(); let rndInt = Math.floor(Math.random() * 1000 * 10); setInterval(function() { now = new Date(); rndInt = Math.floor(Math.random() * 1000 * 10); }, 10 * 1000); // 10 * 1000 milsec const customTimerFunction = () => setInterval(function() { console.log('random int function', now, rndInt) }, rndInt); clearInterval(customTimerFunction); customTimerFunction();
据我了解,匿名setInterval
function 每 10 秒运行一次并更新rndInt
变量。 这由customTimerFunction
使用,但在 function 调用的每次迭代后被清除。 当它再次运行时,它应该有一个新的rndInt
值传递给它。
似乎rndInt
值正在更新,但控制台似乎每 10 秒记录一次,所以我假设这是由常规匿名setInterval
function 更新的。
我做了一个jsfiddle 。
我想尝试避免的是自定义 function 在一天内运行两次。
任何指针?
编辑
这将在 nodejs 应用程序中使用,所以我可以考虑使用一些 cron 库,虽然我对 cron 语法不是很熟悉,但很高兴探索它是否是一个简单的集成选项。
如果您希望它在每 24 小时间隔内的随机点运行,我将有一个 24 小时的间隔,它安排 function 在接下来的 24 小时内的某个时间点运行,即
const myFunction = function() { console.log(`I ran at ${new Date().toISOString()}`); }; const INTERVAL_PERIOD = 1000 * 60 * 60 * 24; const intervalFunction = function() { const nextRunIn = Math.floor(Math.random() * INTERVAL_PERIOD); console.log(`The time is ${new Date().toISOString()}, scheduling run at ${new Date(Date.now() + nextRunIn).toISOString()}`); setTimeout(myFunction, nextRunIn); }; setInterval(intervalFunction, INTERVAL_PERIOD); intervalFunction();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.