简介
Cogsworth-scheduler 是一个基于 Node.js 的任务调度库。它提供了简单易用的 API,允许开发者定义任务和调度规则,并自动执行任务。
Cogsworth-scheduler 使得我们可以轻松地实现循环性任务,比如定时备份、定时清洗数据等,同时也支持一次性任务,如发送邮件、生成报告等。
本篇文章会为大家介绍 Cogsworth-scheduler 的基础使用,包括安装、定义任务、定义调度规则以及启动调度器等。
安装
在开始使用 Cogsworth-scheduler 之前,需要安装该 npm 包。
在终端执行以下命令:
npm install cogsworth-scheduler
安装完成后,在项目中引入该库。可以使用 ES6 使用 import
,也可以使用 CommonJS 使用 require
:
import { Cogsworth } from 'cogsworth-scheduler'; // 或者 const { Cogsworth } = require('cogsworth-scheduler');
定义任务
Cogsworth-scheduler 中的任务被定义为一个函数。函数可以是异步的(async
)或者同步的。该函数会在调度器启动后被执行,且可以接收任意数量的参数。
例如,我们定义一个任务来计算两个数的和:
function add(num1, num2) { console.log(num1 + num2); }
定义调度规则
Cogsworth-scheduler 通过调度规则来定义任务的执行时间。调度规则是一个具有以下字段的对象:
- second: 可选。秒数,0-59。默认为
null
。 - minute: 可选。分钟数,0-59。默认为
null
。 - hour: 可选。小时数,0-23。默认为
null
。 - dayOfMonth: 可选。一个月中的某一天,1-31。默认为
null
。 - month: 可选。月份,0-11(0 表示一月)。默认为
null
。 - dayOfWeek: 可选。星期几,0-6(0 表示星期日)。默认为
null
。
例如,我们定义一个调度规则,每分钟执行一次:
const rule = { minute: '*' };
我们还可以定义一些其他的调度规则,如下:
hour: '4'
:每天早上 4 点执行。dayOfWeek: '2,4'
:每周二和周四执行。dayOfMonth: '10,20'
:每个月的第 10 天和 20 天执行。
除此以外,Cogsworth-scheduler 还支持更复杂的调度规则,如每两周、每季度等等。
启动调度器
在完成任务和调度规则的定义后,我们需要使用 Cogsworth
类来启动调度器并让它开始执行任务。
我们首先需要创建一个新的调度器实例,并在构造函数中传入任务和调度规则:
const scheduler = new Cogsworth(add, rule);
接下来,我们需要调用 start()
方法来启动调度器:
scheduler.start();
调度器启动后,它会按照调度规则自动执行任务,直到调度器被停止。
例如,我们定义的任务每分钟执行一次,我们可以在终端中看到每分钟输出一次计算结果。
停止调度器
如果需要停止调度器,可以通过调用 stop()
方法来实现:
scheduler.stop();
这样,调度器就会停止执行任务,同时该实例也可以被垃圾回收。
示例代码
下面是一个完整的示例代码,用于将邮箱中收到的邮件保存到本地文件系统中:
-- -------------------- ---- ------- ------ - --------- - ---- ---------------------- ------ -------- ---- ----------- ------ - ----------------- - ---- ----- ------ - --------- - ---- ------- ------ - -------- - ---- --------- ------ - ------------ - ---- ------------- ----- ---------- - -------------------------- ------ -------------- ------- -------------- --- ----- -------- -------------------- - ----- ------------ - ----------------------------- ---------------------------- ----- --------------- - -------------------- ----- ---------------------------------------- -------------- - ----- -------- ---------------- - --------------------- ---- ---- -------- ------------------ ----- ------ - ----- --- ----------------- -- - ----------------------- --- ---- -- ---- --- ---- -- --- ---- ------- ------- -------- -- - -------------- --- ----- --- --- -- -------- - ----- --------------------- ----------------- ----- ------------ -- --- ---- ---------- - - ----- ---- - - ------- --- -- ----- --------- - --- --------------- -- -- - ----- - ---------- - - ----------------------- ----- ------ - --- ------------ ----- - ----- -------------------- --------- ---------------- ----- ------------------- ----- ---- ---- ---- - --- ----- ----------------- ----- ----- - ----- ------------------------------ ---------------- ---- ----------------------- -------- -- ---- -------- --- ---- - - -- - -- --------------------- ---- - ----- ------- - ----- ------------------- ----- ---- - ----- ---------------------- ----- ----------------- - ----- ------------- -- ------ ----------------- -------- ------- ------------- ------------------
以上代码会启动一个周期性任务,每分钟检查一次 IMAP 邮箱中是否有新的邮件。如果有新的邮件,则会询问用户是否要将该封邮件保存到本地文件系统中。如果用户同意,则会将邮件保存为 EML 文件。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055d3e81e8991b448db04a