乐趣区

node-schedule 全局内关闭定时器

Cron 表达式
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ 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)
用 Cron 表达式完成定时器
schedule.scheduleJob(‘0 1 * * *’, () => {
// something…
})
关闭定时器
API
let obj = schedule.scheduleJob(‘0 1 * * *’, () => {
// something…
})

obj.close();
全局内关闭定时器 — 疑问
全局内关闭定时器需要获取到定时器的引用
看源码第 607 行
var name = (arguments.length >= 3 && typeof arguments[0] === ‘string’) ? arguments[0] : null;
var spec = name ? arguments[1] : arguments[0];
var method = name ? arguments[2] : arguments[1];
var callback = name ? arguments[3] : arguments[2];
scheduleJob 存在第四个参数,然而 readme 中没有提及,可知 API
scheduleJob(name, spec, method, callback)
// name: 定时器的 key 值 spec: Cron 表达式 method: method callback: callback
全局内关闭定时器 — 解决
首先定义定时器
scheduleJob(name, spec, method, callback)
在需要关闭的地方, 写如下代码
function repeatSchedule(str) {
for (var i in nodeschedule.scheduledJobs) {
// 对比 key 值,key 相同则重复
if (nodeschedule.scheduledJobs[i].name.indexOf(str) > 0) {
nodeschedule.scheduledJobs[i].close();
}
}
}

退出移动版