在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开发微信公众号后台服务实例
Sep 03 NodeJs
nodejs npm package.json中文文档
Sep 04 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
3分钟快速搭建nodejs本地服务器方法运行测试html/js
Apr 01 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
NodeJs生成sitemap站点地图的方法示例
Jun 11 NodeJs
用Nodejs实现在终端中炒股的实现
Oct 18 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
python中os模块详解
2016/10/14 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
质检部职责
2013/12/28 职场文书
校园安全广播稿
2014/02/08 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
公司租房协议书范本
2014/10/08 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
文案策划岗位职责
2015/02/11 职场文书
员工自我评价范文
2015/03/11 职场文书
一个都不能少观后感
2015/06/04 职场文书