在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文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodeJs爬虫的技术点总结
May 13 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
nodejs中实现修改用户路由功能
May 24 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 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与jquery设置和读取cookies
2013/08/08 PHP
php开发工具有哪五款
2015/11/09 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
js评分组件使用详解
2017/06/06 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
openlayers4实现点动态扩散
2020/08/17 Javascript
python 链接和操作 memcache方法
2017/03/04 Python
python executemany的使用及注意事项
2017/03/13 Python
Python全排列操作实例分析
2018/07/24 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Django操作session 的方法
2020/03/09 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
怎么写好自荐信
2013/10/30 职场文书
军训的自我鉴定
2013/12/10 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书