繁体   English   中英

setInterval function 每天,但将一个随机的 integer 传递给另一个 function。这样 function 每天随机触发一次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM