在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中自定义事件实例
Jun 20 NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
NodeJS连接MongoDB数据库时报错的快速解决方法
May 13 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
nodejs socket服务端和客户端简单通信功能
Sep 14 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
Nodejs libuv运行原理详解
Aug 21 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操作XML作为数据库的类
2010/12/19 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
jQuery 表格工具集
2010/04/25 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
github配置使用指南
2014/11/18 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
Python logging设置和logger解析
2019/08/28 Python
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
政府门卫岗位职责
2014/04/29 职场文书
运动会拉拉队口号
2014/06/09 职场文书
北京导游词
2015/02/12 职场文书
2015个人半年总结范文
2015/03/09 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
PO模式在selenium自动化测试框架的优势
2022/03/20 Python