在NodeJs中使用node-schedule增加定时器任务的方法


Posted in NodeJs onJune 08, 2020

java中直接使用定时器类就行了,但是在node中就没有这么简单了,只能使用setInterval或者setTimeout两个方法来实现,但是太繁琐了,搜索了之后发现node-schedule这个包,特意试用一下

版本

node版本12.16.2koa2版> 2.7.0

1. 安装

npm insatll node-schedule -S

2. 使用方法

2-1. 调用格式

// 任务名称可以用中文,也可以用英文,但必须唯一
schedule.scheduleJob(`任务名称`, `时间`, () => {
});

2-2. 时间格式

  • 每分钟的第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'

3. 在项目中使用

3-1. 建立schedule.js

const schedule = require('node-schedule');
// 生成新的定时任务
let interval = async (options) => {
 return new Promise((resolve) => {
 // 这里设定14天为一个循环周期
 // 假如设定的日期是2020-06-08, 返回就是{year: 2020, month: 6, day: 22, hour: 8, min: 0}
 let time14 = GetDateStr(options.maintain_time, 14)
 console.log(`${options.unit_name}_${time14.year}-${time14.month}-${time14.day}`, `1-2 1 1 ${time14.day} ${time14.month} *`)
 // 终止之前的定时任务
 editMaintainTime(options)
 // 按照固定格式,设定定时任务,这里使用每条数据的唯一字段+定时任务时间,作为任务名称存入定时任务列表中
 / 任务名称就是'名字_2020-6-22'
 // 任务时间就是'1-2 1 1 22 6 *' ,意思是每年的6月22日的每小时的1秒~10秒触发
 schedule.scheduleJob(`${options.unit_name}_${time14.year}-${time14.month < 10 ? "0" + time14.month: time14.month}-${time14.day < 10 ? "0" + time14.day: time14.day}`, `1-10 * * ${time14.day} ${time14.month} *`, () => {
 console.log(options,'The world is going to end today.' + new Date())
 // 写入你自己想在定时任务触发的时候,想要执行的函数
 });
}
// 删除定时任务
let editMaintainTime = async (options) => {
 console.log('options', options)
 // 查看所有的定时任务
 for (let i in schedule.scheduledJobs) {
 console.error("任务删除前:"+i);
 }
 // 终止之前的定时任务
 console.log('终止的任务', `${options.alarm14}`)
 if (schedule.scheduledJobs[`${options.alarm14}`]) {
 schedule.scheduledJobs[`${options.alarm14}`].cancel();
 }
 // 查看剩下的定时任务
 for (let i in schedule.scheduledJobs) {
 console.error("任务删除后:"+i);
 }
 // time.cancel()
 console.log('删除成功')
}
// 时间选择
let GetDateStr = (maintain_time, AddDayCount) => {
 var dd = new Date(`${maintain_time}`);
 dd.setDate(dd.getDate() + AddDayCount); // 获取AddDayCount天后的日期
 var y = dd.getFullYear(); 
 var m = dd.getMonth() + 1
 var d = dd.getDate()
 var h = dd.getHours()
 var min = dd.getMinutes()
 return {
 year: y,
 month: m,
 day: d,
 hour: h,
 min: min,
 }
}
const intervalControl = {
 interval: interval
}
module.exports = intervalControl

3-2. 调用该方法

const intervalControl = require('../util/schedule')

// options传入{unit_name: '名字', maintain_time: '自己选择的开始时间', alarm14: '上一次定时任务的任务名称'}
// unit_name,无格式
// maintain_time:2020-06-08
// alarm14: 2020-06-22
intervalControl.interval(options)

总结

到此这篇关于在NodeJs中使用node-schedule增加定时器任务的方法的文章就介绍到这了,更多相关node schedule定时器任务内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

NodeJs 相关文章推荐
浅谈NodeJS中require路径问题
May 07 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
图片上传之FileAPI与NodeJs
Jan 24 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
NodeJs实现定时任务的示例代码
Dec 05 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 #NodeJs
NodeJS多种创建WebSocket监听的方式(三种)
Jun 04 #NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 20 #NodeJs
Nodejs实现WebSocket代码实例
May 19 #NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 #NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 #NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 #NodeJs
You might like
使用php计算排列组合的方法
2013/11/13 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
关于PHP开发的9条建议
2015/07/27 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
用Python逐行分析文件方法
2019/01/28 Python
python中嵌套函数的实操步骤
2019/02/27 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
劳资人员岗位职责
2013/12/19 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
保安部任务及岗位职责
2014/02/25 职场文书
小学生新年寄语
2014/04/03 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
红白喜事主持词
2015/07/06 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python