在NodeJs中使用node-schedule增加定时器任务的方法

 更新时间:2020年6月9日 08:05  点击:1886

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增加定时器任务的文章就介绍到这了,更多相关从零开始在NodeJs中使用node-schedule增加定时器任务内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • php5.3下使用php管理crontab计划任务

    php5.3或以上版本可以使用php管理crontab计划任务,下面我先来体验一下,有需要学习了解的朋友可进入参考。 1.使用php-crontab-manager管理计划任务 要求 PHP>=5.3...2016-11-25
  • NodeJS实现阿里大鱼短信通知发送

    本文给大家介绍的是nodejs实现使用阿里大鱼短信API发送消息的方法和代码,有需要的小伙伴可以参考下。...2016-01-20
  • Nodejs回调加超时限制两种实现方法

    这篇文章主要介绍了Nodejs回调加超时限制两种实现方法的相关资料,需要的朋友可以参考下...2017-06-15
  • Nodejs中使用captchapng模块生成图片验证码

    本篇文章主要介绍了Nodejs中使用captchapng模块实现图片验证码,非常具有实用价值,需要的朋友可以参考下 ...2017-05-22
  • Nodejs学习item【入门手上】

    这篇文章主要介绍了Nodejs学习item【入门手上】,需要的朋友可以参考下...2016-05-09
  • Vue如何优雅的清除定时器

    定时器如果不及时合理地清除,会造成业务逻辑混乱甚至应用卡死的情况,这个时就需要清除定时器,本文就介绍了Vue如何优雅的清除定时器,感兴趣的可以了解一下...2021-07-22
  • nodejs 终端打印进度条实例代码

    本篇文章主要介绍了nodejs 终端打印进度条实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-04-27
  • Nodejs express框架一个工程中同时使用ejs模版和jade模版

    这篇文章主要介绍了Nodejs express框架一个工程中同时使用ejs模版和jade模版 的相关资料,需要的朋友可以参考下...2015-12-29
  • Node.js检测端口(port)是否被占用的简单示例

    大家有没有遇到过在开启本地服务时,有这么一种情况:当前端口已经被另一个项目使用了,导致服务开启失败。那么接下来,我们通过简简单单的示例代码来检测端口是否已经被占用。有需要的朋友们可以参考借鉴。...2016-10-02
  • 详解Windows下安装Nodejs步骤

    本篇文章主要介绍了详解Windows下安装Nodejs步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-05-22
  • Nodejs下DNS缓存问题浅析

    本文给大家一起探讨nodejs下dns的缓存问题,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧...2016-11-22
  • C#定时器实现自动执行的方法

    这篇文章主要介绍了C#定时器实现自动执行的方法,实例分析了C#定时器参数的设置及方法的调用与实现,需要的朋友可以参考下...2020-06-25
  • tomcat启动完成执行 某个方法 定时任务(Spring)操作

    这篇文章主要介绍了tomcat启动完成执行 某个方法 定时任务(Spring)操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-25
  • Nodejs 数组的队列以及forEach的应用详解

    这篇文章主要介绍了Nodejs 数组的队列以及forEach的应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25
  • 详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用

    这篇文章主要介绍了详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用,需要的朋友可以参考下...2020-06-25
  • BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)

    这篇文章主要介绍了BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟) 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-08-24
  • node.js如何根据URL返回指定的图片详解

    这篇文章主要介绍了NODE.JS如何根据URL返回指定的图片详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-21
  • BOM系列第二篇之定时器requestAnimationFrame

    这篇文章主要介绍了BOM系列第二篇之定时器requestAnimationFrame 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-08-24
  • NodeJS通过魔术封包唤醒局域网计算机实例

    这篇文章主要为大家介绍了NodeJS通过魔术封包唤醒局域网计算机代码实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-06-11
  • Qt定时器和随机数详解

    在前一篇中我们介绍了键盘和鼠标事件,其实还有一个非常常用的事件,就是定时器事件,如果要对程序实现时间上的控制,那么就要使用到定时器。而随机数也是很常用的一个功能,在我们要想产生一个随机的结果时就要使用到随机数。本文我们就来简单介绍一下定时器和随机数。...2020-04-25