NodeJs的定时器和队列介绍教程
一、介绍与需求
1.1、简介
Scheduled task (node-schedule)是Node.js的一个灵活的cron类和非cron类作业调度器,它允许您使用可选的递归规则来调度要在特定日期执行的作业(任意函数)。它在任何给定时间都只使用一个计时器(而不是每秒/分钟重新评估即将到来的作业)。
Async是一个实用的模块,它为异步JavaScript提供了直接而强大的功能。异步进程控制器- queue是一个并行进程控制器,但是queue和parallel的区别在于queue可以同时控制几个函数执行,而parallel只允许所有函数并行执行。
1.2、需求
在实际的开发项目中,会有很多常规的任务。例如,定期导出某些数据,定期向用户发送消息或电子邮件,定期备份什么类型的文件。当时给用户发送消息时,可能不仅有一两个用户要发送,还有多个用户,可能是按队列顺序执行。
第二,计时器
第一步是:安装节点计划
npm安装节点的第二步-计划-保存:封装定时器模块
const schedule=require(' node-schedule ');//timer const NodeTimer={ };让cancelTimer=''/** *Cron样式计时器/对象文本语法计时器* @param executionTime: timer字符串“30 * * * * *”/计时器对象{hour: 16,minute: 11,Dayofweek: 1 } * @ paramcallback:回调函数*/node timer . schedule timer=(execution time=“30 * * * * *”, 回调)={//每分钟第30秒触发:‘30 * * * * *//1分30秒每小时触发:‘30 1 * * * *//每天凌晨1:00:‘每月30 1 * * *’//凌晨1:00:‘’2016年1月1日1: 01: 30触发:‘2016年1月1日30 1 1 1 *’//每周一1: 01: 30触发:‘30 1 * * 1’取消者=日程。 schedulejob(执行时间,()={if(回调类型==' function ')} module . exports=NodeTiMer;第三步:被调用
在回调函数中写下要执行的任务代码,一个定时器就完成了!
引入定时器模块:
const nodeTimer=require('。/node _ timer . js ');1.cron风格计时器
规则参数说明*代表通配符
* * * **一周中的某一天(0 - 7) (0或7是太阳) 月(1-12)月中的某一天(1-31)小时(0 - 23) 分钟(0 - 59)秒(0-59,可选)
六个占位符从左到右表示:秒、分钟、小时、天、月和星期几。
*表示通配符,任意匹配,当第二个为*时,表示任何一秒都会触发,以此类推
//每分钟第30秒触发:' ' 30 * * * *//每小时1分30秒触发:' ' 30 1 * * * *//每天上午10:30在1: 01触发:' ' 30 1 1 * * *'//每月1日30在1: 01触发:' ' 30 1 1 1 1 *。2016年1月1日1: 01: 30时触发:‘30 11 11 2016 *’//每周一:30 1:01:30时触发:‘30 1 * * 1’//每分钟触发1-10秒。其他通配符依次类推:“1-10 * * * * *”调用计时器:
nodetimer . scheduletimer(' 30 * * * * *),函数(err){ if(!err){ console . log(' scheduletime : ' new Date());} });效果:
2.对象文本语法计时器
第二(0-59)分钟(0-59)小时(0-23)日期(1-31)月(0-11)日星期几(0-6)从星期日开始//每周一15: 03: 30触发。其他组合可以自由组合node timer . schedule timer({ hour : 15,minute : 3,second : 30},function (err) {if(!err){ console . log(' scheduletime : ' new Date());} });效果:
3.基于日期的计时器
var date=新日期(2019年01月07日15日03月30日);nodeTimer.scheduleTimer(date,function(err){ if(!err){ console . log(' scheduletime : ' new Date());} });4.递归规则计时器
参数类似于对象文本语法计时器的参数
var规则=新计划。recurrencerrule();rule.dayOfWeek=[0,新计划。范围(4,6)];//执行rule.hour=每周四、周五、周六15;rule . minute=0;nodeTimer.scheduleTimer(规则,函数(err){ if(!err){ console . log(' scheduletime : ' new Date());} });5.取消计时器
//取消定时器//调用timer对象的cancl()方法获取nodetime . schedule cancel=()={//定时器取消canceltimer . cancel();Console.log(“计时器已成功取消”);}通话:
nodeTimer.scheduleCancel()的效果:
第三,排队
步骤1:安装异步
Npminstall-saveasync步骤2:封装方法
Queue相当于并行的增强版本,它主要限制工作进程的数量,不再一次执行所有的工作进程。当工人数量不足时,新添加的任务将排队等待,直到有新工人可用。
这个函数有几个回调点,比如什么时候工人用完了,什么时候没有等待的任务,什么时候所有的任务都执行完了等等。
const async=require(' async ');/* * *队列* @paramobj: obj对象包含执行时间* @ param回调:回调函数*/const nodequeue=async . queue(function(obj,Callback){ settimeout(function(){//Callback function if(Callback的类型==' function '){ Callback();}},obj.time)},1)//当工作人员数量将用完时,将调用饱和函数nodequeue .饱和=function () {console.log('所有要使用的工作人员');}//当最后一个任务移交给工作人员时,将调用空函数nodequeue . empty=function(){ console . log('不再有任务监视');}//所有任务完成后,将调用drain函数nodequeue . drain=function(){ console . log('所有任务均已处理');} module.exports=nodeQueue第三步:调用方法
const nodeQueue=require('。/node _ queue . js’);for(设I=0;i 10I) {nodequeue.push ({name: 1,time: 2000},function (err) {console.log('队列执行错误消息==',err);if(!Err){ //要在控制台执行的代码或函数. log('要执行的代码或函数' No . ',i 1,' no . ')});效果:
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。
版权声明:NodeJs的定时器和队列介绍教程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。