定时任务
-
使用 node-schedule
npm install -S node-schedule 或 yarn add node-schedule -
实例代码
const schedule = require('node-schedule') const rule = new schedule.RecurrenceRule() /** 执行的秒数 */ const times = [ 10, 11, 21, 31, 41, 51 ] rule.second = times /** 每 10 秒 定时执行一次 */ schedule.scheduleJob(rule, () => { console.log('schedule:' + new Date()) }) -
node-schedule
* * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day of month (1 - 31) │ │ └─────────────── hour (0 - 23) │ └──────────────────── minute (0 - 59) └───────────────────────── second (0 - 59, OPTIONAL) 6个占位符从左到右分别代表:秒、分、时、日、月、周几 表示通配符,匹配任意,当秒是*时,表示任意秒数都触发,其它类推 -
参数介绍
每1秒触发: '* * * * * *' 每分钟的第30秒触发: '30 * * * * *' 每小时的1分30秒触发 :'30 1 * * * *' 每天的凌晨1点1分30秒触发 :'30 1 1 * * *' 每月的1日1点1分30秒触发 :'30 1 1 1 * *' 2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *' 每周1的1点1分30秒触发 :'30 1 1 * * 1' -
特殊例子 (每 5 秒执行一次)
const schedule = require('node-schedule') const rule = new schedule.RecurrenceRule() const times = [ 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56 ] /** * second 秒 * minute 分钟 * hour 小时 * 设置三个值 对应三个时间阀值 */ rule.second = times schedule.scheduleJob(rule, () => { console.log(123) }) -
取消定时器 cancel 方法
const schedule = require('node-schedule') let counter = 1 const timer = schedule.scheduleJob('* * * * * *', () => { console.log('定时器触发次数:' + counter) counter++ }) setTimeout(() => { timer.cancel() console.log('定时器取消') }, 5000)