小小又开始进入学习状态,小小本次学习的内容是 Node.js 的定时工作。
这里对于Node.js 应用的是node-schedule定时器。所以这里总体是对node-schedule包的相干的学习。
装置
应用npm装置相干的包
npm install node-schedule --save
或者
yarn add node-schedule
应用案例
对于定时器来说,应用的通通是Cron格调的定时器。
const schedule = require('node-schedule');
const scheduleCronstyle = ()=>{
//每分钟的第30秒定时执行一次:
schedule.scheduleJob('30 * * * * *',()=>{
console.log('scheduleCronstyle:' + new Date());
});
}
scheduleCronstyle();
这里在其回调函数中写入要执行的工作代码,一个定时器就彻底的竣工了
Cron 格调
这里对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)
从左到右别离代表着
秒、分、时、日、月、周几
例如以下的参数别离代表着相干的解释
每分钟的第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'
应用对象的形式,编写定时器
const schedule = require('node-schedule');
function scheduleObjectLiteralSyntax(){
//dayOfWeek
//month
//dayOfMonth
//hour
//minute
//second
//每周一的下午16:11分触发,其它组合能够依据我代码中的正文参数名自由组合
schedule.scheduleJob({hour: 16, minute: 11, dayOfWeek: 1}, function(){
console.log('scheduleObjectLiteralSyntax:' + new Date());
});
}
scheduleObjectLiteralSyntax();
递归规定定时器
这里应用递归规定定时器
var schedule = require('node-schedule');
function scheduleRecurrenceRule(){
var rule = new schedule.RecurrenceRule();
// rule.dayOfWeek = 2;
// rule.month = 3;
// rule.dayOfMonth = 1;
// rule.hour = 1;
// rule.minute = 42;
rule.second = 0;
schedule.scheduleJob(rule, function(){
console.log('scheduleRecurrenceRule:' + new Date());
});
}
scheduleRecurrenceRule();
勾销定时器
这里勾销定时器应用的是cancl办法
const schedule = require('node-schedule');
function scheduleCancel(){
var counter = 1;
const j = schedule.scheduleJob('* * * * * *', function(){
console.log('定时器触发次数:' + counter);
counter++;
});
setTimeout(function() {
console.log('定时器勾销')
// 定时器勾销
j.cancel();
}, 5000);
}
scheduleCancel();
其余包
这里持续介绍另外一个包,Later
Later是一个基于Nodejs的工具库,用最简略的形式执行定时工作。Later能够运行在Node和浏览器中。
装置
Later能够运行在Node和浏览器中,别离用npm和bower进行依赖治理
~ cd /home/conan/nodejs
~ mkdir nodejs-later && cd nodejs-later
~ sudo npm install later
npm http GET https://registry.npmjs.org/later
npm http 200 https://registry.npmjs.org/later
npm http GET https://registry.npmjs.org/later/-/later-1.1.6.tgz
npm http 200 https://registry.npmjs.org/later/-/later-1.1.6.tgz
later@1.1.6 node_modules/later
根本应用
创立一个每5分钟启动的定时器规定,输入启动工夫
var later = require('later');
var sched = later.parse.text('every 5 mins'),
occurrences = later.schedule(sched).next(10);
for(var i=0;i<10;i++){
console.log(occurrences[i]);
}
相干原理
利用setTimeOut和event事件进行治理,对所有退出的事件进行排序,并且计算以后工夫和最近一个事件产生工夫的工夫距离,而后调用setTimeOut设置回调。总的来说分两种事件,一种是一次性的,一种是周期性的,一次性工作调用完就完结,周期性的会一直地循环调用,当一个周期性事件被调用后,会依据周期生成下一个周期工作,并增加到工作列表中,从新排序。每个工作调用完结,都会计算并筹备下一个工作。
值得注意的一点是,在循环工作中,每个工作须要独自new一个schedule.RecurrenceRule对象,不能专用。另外就是一点网上提的比拟少的一点,如果咱们对循环中的工夫成员没有设置,阐明咱们对其不感兴趣。源代码中,未设置的工夫成员为null,循环构造的匹配采纳的是从分钟开始的逐渐累加,如果发现某成员是null,那么就间接匹配,如果不是null,就从0开始,逐步累加,晓得齐全匹配。
发表回复