在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+express+html5 实现拖拽上传
Aug 08 NodeJs
使用Nodejs开发微信公众号后台服务实例
Sep 03 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 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获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
python requests.post带head和body的实例
2019/01/02 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
在Django中实现添加user到group并查看
2019/11/18 Python
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
数学专业毕业生自荐信
2013/11/10 职场文书
房地产员工找工作的自我评价
2013/11/15 职场文书
运动会入场词100字
2014/02/06 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
实验心得体会
2014/09/05 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
道歉信怎么写
2015/05/12 职场文书
怎样写家长意见
2015/06/04 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
python Polars库的使用简介
2021/04/21 Python
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python