NodeJs入门教程之定时器和队列

定时任务(node-schedule),是针对Node.js的一种灵活的cron-like和not-cron-like作业调度程序。它允许您使用可选的递归规则将作业(任意函数)安排在特定日期执行。它在任何给定的时间只使用一个计时器(而不是每秒钟/分钟重新评估即将到来的作业)。

Async是一个实用模块,它为异步JavaScript提供了直接、强大的功能。async流程控制器--queue(队列),queue流程控制器是一个并行的流程控制器,但是它与parallel的区别在于queue可以控制一次执行几个函数,而parallel只是让所有函数并行执行.

 1.2,需求

实际开发项目中,会遇到很多定时任务的工作。比如:定时导出某些数据、定时发送消息或邮件给用户、定时备份什么类型的文件等等。在当时给用户发送消息时,可能要发送的用户就不只有一两个,二是多个,这是可能就会用到队列顺序执行。

二,定时器

第一步:安装node-schedule

npm install node-schedule --save

第二步:封装定时器模块

const schedule = require('node-schedule');//定时器 const nodeTimer = {}; let cancelTimer = '' /** *Cron风格定时器/对象文本语法定时器 * @param executionTime :定时器字符串'30 * * * * *'/定时器对象{hour: 16, minute: 11, dayOfWeek: 1} * @param callback :回调函数 */ nodeTimer.scheduleTimer = (executionTime = '30 * * * * *', callback) => { // 每分钟的第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' cancelTimer = schedule.scheduleJob(executionTime, () => { if (typeof callback === 'function') { callback() } }); } module.exports = nodeTimer;

第三步:调用

在回调函数中写入要执行的任务代码,一个定时器就完成了!

引入定时器模块:

const nodeTimer = require('./node_timer.js');

1,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)

6个占位符从左到右分别代表:秒、分、时、日、月、周几

*表示通配符,匹配任意,当秒是*时,表示任意秒数都触发,其它类推

// 每分钟的第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' // 每分钟的1-10秒都会触发,其它通配符依次类推 :'1-10 * * * * *'

调用定时器:

nodeTimer.scheduleTimer('30 * * * * *',function(err){ if(!err){ console.log('scheduleTimer:' + new Date()); } });

效果:

NodeJs入门教程之定时器和队列

2、对象文本语法定时器

second (0-59)

minute (0-59)

hour (0-23)

date (1-31)

month (0-11)

year

dayOfWeek (0-6) Starting with Sunday

//每周一的下午15:03:30触发,其它组合可以根据我代码中的注释参数名自由组合 nodeTimer.scheduleTimer({hour: 15, minute: 3, second: 30},function(err){ if(!err){ console.log('scheduleTimer:' + new Date()); } });

效果:

NodeJs入门教程之定时器和队列

3、基于日期的定时器

var date = new Date(2019, 01, 07, 15, 03, 30); nodeTimer.scheduleTimer(date,function(err){ if(!err){ console.log('scheduleTimer:' + new Date()); } });

4、递归规则定时器

参数与对象文本语法定时器的参数类似

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/68b0f9cf7b5a90bec5812d407b7fbf13.html