setTimeout,然后停止,直到下一个特定的时间



我正在运行以下代码作为更广泛的一堆代码的一部分,我想说的函数"tweeter"每天上午9点、13点、17点和21点运行。

然而,当我运行代码时,它会正确地等待"小时";然后,它将继续运行该函数,而不是停止并等待检查下一个小时是否匹配。

我希望它遵循的工作流程是

  1. 按小时运行代码
  2. 当小时匹配9,13,17或21时运行函数
  3. 停止运行直到下一个小时检查
  4. 重复1 - 2

var now = new Date();
var delay = 60 * 60 * 1000; // 1 hour in msec
var start = delay - (now.getMinutes() * 60 + now.getSeconds()) * 1000 + now.getMilliseconds();
setTimeout(function doSomething() {
if ((now.getHours() === 9) || (now.getHours() === 13) || (now.getHours() === 17) || (now.getHours() === 21)) {
tweeter();
}
setTimeout(doSomething, delay);
}, start);

您可以使用以下cron作业检查文档

var CronJob = require('cron').CronJob;
var job = new CronJob('0 0 9,13,17,21 * * *', function() {
tweeter();
}, null, true, 'America/Los_Angeles');
job.start();

使用一个整理好的解决方案,每三个小时运行一次,而不是特定的一个小时。我和克朗一起去的。最后按预期工作的调度:

var cron = require('node-cron');
cron.schedule('0 0-21/3 * * *', () => {
tweeter();
});

最新更新