Node 定时器

定时任务

需要给一个任务设定固定间隔的定时, 即1<-10min->2<-10min->3, 这样的任务类型, 但是1, 2, 3这些个任务是不定时间的, 而且不能让任务重叠在一个时间段内执行, 所以就不能用系统的crontab方案了(不好动态设定时间), 后来使用的是setINterval这个方法, 但是间隔时间需要没次执行任务的时候重新算, 更新任务的间隔时间.

后来想到了不管是哪个, 都让他在任务结束后在设定下一次执行的时间就好了. 那么, 就不用计算某个任务的执行时间来动态加减了(因为执行时间又可能收到网络速度的影响, 所以计算出来的间隔是不准确的)

后来找到了使用 node-schedule 的方法, 很符合我的需求

1
2
3
4
5
6
7
8
9
10
11
12
13
var schedule = require('node-schedule');
var date = new Date('2019-02-26 22:00:00');

var j = schedule.scheduleJob(date, function(){
console.log('The world is going to end today.');
});

// 最后在需要修改时间的地方调用 cancel 方法, 重新设定一个定时器就可以了
j.cancel()
var date = new Date('2017-02-26 23:00:00');
j = schedule.scheduleJob(date, function(){
console.log('The another is going to end today.');
});

后记

后来发现自己有点傻逼…
为什么不直接 while(true), 在循环中执行任务的最后休眠一段时间就好了…ಥ_ಥ…真是想太多…

不过也算是了解了些定时任务的知识…

额外

还有使用 redis 的键空间消息的过期时间通知来作为触发任务的时间来完成定时任务的, 看了下, 不太契合我的需求,就不做过多了解了