javascript - setTimeout 一天中的特定时间,然后停止直到下一个特定时间
问题描述
我正在运行以下代码,作为更广泛的代码的一部分,我希望所说的函数“tweeter”全天在 09.00、13.00、17.00 和 21.00 运行。
但是,当我运行代码时,它将正确等待“小时”,然后它将继续运行该函数,而不是停止并等待检查下一个小时是否匹配。
我希望它遵循的工作流程是
- 每小时运行代码
- 如果小时匹配 9、13、17 或 21,则运行函数
- 停止运行直到下一个小时检查
- 重复 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();