在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 相关文章推荐
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
php 清除网页病毒的方法
2008/12/05 PHP
php 上传功能实例代码
2010/04/13 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
Python subprocess模块学习总结
2014/03/13 Python
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Django实现学生管理系统
2019/02/26 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
python Gabor滤波器讲解
2020/10/26 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
Python文件操作的面试题
2013/06/22 面试题
Java程序员面试90题
2013/10/19 面试题
2014小学数学教研组工作总结
2014/12/06 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis