小小又开始进入学习状态,小小本次学习的内容是 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 laternpm http GET https://registry.npmjs.org/laternpm http 200 https://registry.npmjs.org/laternpm http GET https://registry.npmjs.org/later/-/later-1.1.6.tgznpm http 200 https://registry.npmjs.org/later/-/later-1.1.6.tgzlater@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开始,逐步累加,晓得齐全匹配。