timed-silky
TypeScript icon, indicating that this package has built-in type declarations

0.2.0 • Public • Published

Timed-Silky(丝滑的定时任务调度器)

介绍

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

功能

  • 支持按固定时刻特定频率调度任务,还可限定时间范围
  • 支持秒级、分钟级、小时级、天级的频率调度。(未来可能会支持毫秒级、周级、月级、年级,看需求而定)。
  • 充分利用 TypeScript 的类型能力,提供易于使用的两种接口:
    • 符合特定句式的链式调用接口。
    • 符合特定句式的自然语言描述接口。

优点

  • 直观:可以用符合特定句式的自然语言描述定时任务,易于理解和维护。
  • 简洁:提供符合特定句法的链式接口。
  • 无心智负担:充分利用编辑器的智能提示,写代码时无需查看接口文档和源码。
  • 依赖小,只依赖于浏览器和 Node.js 提供的 setTimeout,未来可以还会依赖 SetInterval

使用

安装

pip install timed-silky

示例

秒级任务

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();

分钟级任务

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();

小时级任务

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();

天极任务

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 版本未发布前,不要用于生产环境。

Package Sidebar

Install

npm i timed-silky

Weekly Downloads

6

Version

0.2.0

License

ISC

Unpacked Size

48.7 kB

Total Files

15

Last publish

Collaborators

  • shimachao