在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极简入门教程(三):进程
Oct 27 NodeJs
初始Nodejs
Nov 08 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
nodejs读取并去重excel文件
Apr 22 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 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写杨辉三角实例代码
2011/07/17 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
jquery操作select大全
2014/04/25 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
在Mac上删除自己安装的Python方法
2018/10/29 Python
python自动化之Ansible的安装教程
2019/06/13 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
英国精品买手店:Browns Fashion
2016/09/29 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
教师个人自我鉴定
2014/02/08 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
市场营销战略计划书
2014/05/06 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
毕业生入职感言
2015/07/31 职场文书