在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 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
Nodejs把接收图片base64格式保存为文件存储到服务器上
Sep 26 NodeJs
NodeJS模块与ES6模块系统语法及注意点详解
Jan 04 NodeJs
nodejs log4js 使用详解
May 31 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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中递归的实现实例详解
2017/11/14 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python格式化css文件的方法
2015/03/10 Python
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
python爬取微信公众号文章的方法
2019/02/26 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
管理工程专业求职信
2014/08/10 职场文书
规范化管理年活动总结
2014/08/29 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
浅谈Python数学建模之固定费用问题
2021/06/23 Python