在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 25 NodeJs
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 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中include()与require()的区别说明
2010/03/10 PHP
php 文件上传类代码
2011/08/06 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
php之可变函数的实例详解
2017/09/13 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
json数据的列循环示例
2013/09/06 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
利用Python如何批量更新服务器文件
2018/07/29 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
药剂专业学生求职信范文
2013/12/28 职场文书
热门专业求职信
2014/05/24 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
接收函格式
2015/01/30 职场文书
红色经典电影观后感
2015/06/18 职场文书
Go 中的空白标识符下划线
2022/03/25 Golang
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python