在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的模块写法入门(实例代码)
Mar 07 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
nodejs实现UDP组播示例方法
Nov 04 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 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检查日期函数checkdate用法实例
2015/03/19 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
orm获取关联表里的属性值
2016/04/17 PHP
PHP框架性能测试报告
2016/05/08 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
2019/03/21 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
网上应用的一个不错common.js脚本
2007/08/08 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
Python实例之wxpython中Frame使用方法
2014/06/09 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
聊聊Python中的pypy
2018/01/12 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
python 19个值得学习的编程技巧
2020/08/15 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
企业精细化管理实施方案
2014/03/23 职场文书