在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实现PHP的print_r函数代码
Mar 14 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
浅谈JS和Nodejs中的事件驱动
May 05 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
php 无法载入mysql扩展
2010/03/12 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
基于jquery的表格排序
2010/09/11 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
js图片处理示例代码
2014/05/12 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Python实现括号匹配方法详解
2020/02/10 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
会计主管岗位职责
2014/01/03 职场文书
干部培训自我鉴定
2014/01/22 职场文书
公司节能减排方案
2014/05/16 职场文书
林肯就职演讲稿
2014/05/19 职场文书
物流专业求职信
2014/06/30 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL