在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 相关文章推荐
14款NodeJS Web框架推荐
Jul 11 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 NodeJs
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
May 30 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 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查询ip所在地的方法
2014/12/05 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
javascript获取当前ip的代码
2009/05/10 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
谈一谈javascript闭包
2016/01/28 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
JavaScript实现新年倒计时效果
2018/11/17 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
python游戏地图最短路径求解
2019/01/16 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
JAVA高级程序员面试题
2013/09/06 面试题
车祸赔偿收入证明
2014/01/09 职场文书
假期安全教育广播稿
2014/10/04 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
2019各种保证书范文
2019/06/24 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
Python各协议下socket黏包问题原理
2022/04/12 Python