在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异步回调的优雅处理方法
Sep 25 NodeJs
nodejs URL模块操作URL相关方法介绍
Mar 03 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
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
MYSQL环境变量设置方法
2007/01/15 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
网页常用特效代码整理
2006/06/23 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
js实现抽奖效果
2017/03/27 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
python读取txt文件中特定位置字符的方法
2018/12/24 Python
用python实现名片管理系统
2020/06/18 Python
python 读取、写入txt文件的示例
2020/09/27 Python
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
股权收购意向书
2014/04/01 职场文书
高考学习决心书
2015/02/04 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
校园之声广播稿
2015/08/18 职场文书
python关于集合的知识案例详解
2021/05/30 Python
详细分析PHP7与PHP5区别
2021/06/26 PHP
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python
pt-archiver 主键自增
2022/04/26 MySQL
德生2P3收音机开箱评测
2022/04/30 无线电