UNPKG

timed-silky

Version:

Timed-Silky 是基于一款基于 TypeScript 的定时任务调度器。得益于 TypeScript,Timed-Silky 可以用符合特定句式的自然语言描述任务的调度规则,提供丝滑的链式调用接口。

122 lines (91 loc) 3.88 kB
# Timed-Silky(丝滑的定时任务调度器) ## 介绍 Timed-Silky 是基于一款基于 TypeScript 的定时任务调度器。得益于 TypeScript,Timed-Silky 可以用符合特定句式的自然语言描述任务的调度规则,提供丝滑的链式调用接口。 ## 功能 - 支持按**固定时刻**,**特定频率**调度任务,还可限定**时间范围**。 - 支持秒级、分钟级、小时级、天级的频率调度。(未来可能会支持毫秒级、周级、月级、年级,看需求而定)。 - 充分利用 TypeScript 的类型能力,提供易于使用的两种接口: - 符合特定句式的链式调用接口。 - 符合特定句式的自然语言描述接口。 ## 优点 - 直观:可以用符合特定句式的自然语言描述定时任务,易于理解和维护。 - 简洁:提供符合特定句法的链式接口。 - 无心智负担:充分利用编辑器的智能提示,写代码时无需查看接口文档和源码。 - 依赖小,只依赖于浏览器和 Node.js 提供的 `setTimeout`,未来可以还会依赖 `SetInterval`。 ## 使用 ### 安装 ```shell pip install timed-silky ``` ### 示例 #### 秒级任务 ```typescript import { silkyTimer } from "timed-silky"; let blink = () => { console.log(`${new Date().toLocaleString()}:眨眼`); }; // 每 5 秒眨眼一次 silkyTimer.run(blink).timed("every 5 seconds"); // 7:30 至 23:00,每 5 秒眨眼一次,使用链式调用接口 silkyTimer.run(blink).every(5).seconds().from('7:30').to('23:00'); // 或者,使用自然语言接口 silkyTimer.run(blink).timed("every 5 seconds from 7:30 to 23:00"); // 启动 silkyTimer.start(); ``` #### 分钟级任务 ```typescript import { silkyTimer } from "timed-silky"; let rest = () => { console.log(`${new Date().toLocaleString()}:休息`); }; // 从 8:00 至 18:00,每 45 分钟休息一次 silkyTimer.run(rest).every(45).minutes().from('8:00').to('18:00'); // 或者 silkyTimer.run(rest).timed('every 45 minutes from 8:00 to 18:00'); // 启动 silkyTimer.start(); ``` #### 小时级任务 ```typescript import { silkyTimer } from "timed-silky"; let eat = () => { console.log(`${new Date().toLocaleString()}:吃饭`); }; // 每天 8 点、12 点、18 点 吃饭 silkyTimer.run(eat).timed('at 8:00,12:00 and 18:00'); // 或者,换种表达方式,还能接受语法检查 silkyTimer.run(eat).at('8:00', '12:00', '18:00'); // 或者,你比较随性,每四小时吃一次 silkyTimer.run(eat).every(4).hours().from("8:00").to("18:00"); // 启动 silkyTimer.start(); ``` #### 天极任务 ```TypeScript import { silkyTimer } from "timed-silky"; // 一组待调度的任务 let clock = () => { console.log(`${new Date().toLocaleString()}:打上班卡`); }; let report = () => { console.log(`${new Date().toLocaleString()}:写周报`); }; let exercise = () => { console.log(`${new Date().toLocaleString()}:锻炼身体`); } // 每7天发一次周报 silkyTimer.run(report).every(7).days(); // 周一到周五,每天打一次上班卡 silkyTimer.run(clock).every_day().on('monday').to('friday'); // 周三、周六锻炼身体 silkyTimer.run(exercise).every_day().on('wednesday', 'saturday'); // 除了周六,每天都上班 silkyTimer.run(clock).every_day().except("saturday"); // 启动 silkyTimer.start(); ``` ## 注意 - Time-Silky 本质上还是调用 `setTimeout` 接口,被调度的任务在主线程执行,如果某个任务占用主线程太长时间,会推迟其他任务的执行时间。所以尽量安排异步任务、耗时不长的同步任务。 - Time-Silky 的能力只是 Linux Corn 能力的子集,但是更好理解,更好用。 - 在 1.0 版本未发布前,不要用于生产环境。