在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远程代码执行
Aug 28 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 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
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
jQuery的each循环用法简单示例
2016/06/12 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
JavaScript手风琴页面制作
2017/05/17 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python 剪切移动文件的实现代码
2018/08/02 Python
pandas DataFrame创建方法的方式
2019/08/02 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
美发活动策划书
2014/01/14 职场文书
入职担保书范文
2014/05/21 职场文书
工程索赔意向书
2014/08/30 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
python 实现定时任务的四种方式
2021/04/01 Python