Web Daemon
Web Daemon 是一个用于创建和管理定时任务的工具包,它提供了一种简单的方式来处理需要定期执行的任务。
特性
- 支持创建定时执行的任务
- 可以控制任务的执行频率和总次数
- 支持暂停和恢复任务
- 提供全局任务管理功能
- 支持立即执行任务
- 提供完整的 TypeScript 类型支持
安装
npm install @kazura/web-daemon
使用方法
基本用法
import WebDaemon from '@kazura/web-daemon'
// 创建一个每秒执行一次的任务
const daemon = new WebDaemon(
(next, daemon) => {
console.log('Task executed at index:', daemon.index)
next()
},
1000 // 执行间隔(毫秒)
)
// 启动任务
daemon.start()
// 暂停任务
daemon.pause()
// 恢复任务
daemon.start()
限制执行次数
// 创建一个只执行5次的任务
const limitedDaemon = new WebDaemon(
(next, daemon) => {
console.log('Task executed at index:', daemon.index)
next()
},
1000,
5 // 最多执行5次
)
limitedDaemon.start()
立即执行
const immediateDaemon = new WebDaemon((next, daemon) => {
console.log('Task executed at index:', daemon.index)
next()
}, 1000)
// 启动时立即执行一次
daemon.start(true)
API 参考
构造函数
constructor(
task: (next: () => void, daemon: WebDaemon) => void,
rate: number = 1000,
len: number = Number.POSITIVE_INFINITY
)
task
: 需要执行的任务函数rate
: 执行间隔(毫秒),默认为 1000len
: 最大执行次数,默认为无限
方法
start(immediate: boolean = false): void
- 启动任务immediate
: 是否立即执行一次
pause(): void
- 暂停任务forceCall(): void
- 强制执行一次任务synchronize(): void
- 同步任务执行时间isAtEnd(): boolean
- 检查任务是否已结束
静态方法
pauseAll(): void
- 暂停所有运行中的任务
属性
index: number
- 当前执行次数len: number
- 最大执行次数timer: number
- 计时器标识paused: boolean
- 是否处于暂停状态
注意事项
- 任务函数必须调用
next()
回调来继续执行 - 使用
forceCall()
会增加index
计数 - 当任务达到最大执行次数时,会自动暂停
- 使用
pauseAll()
可以一次性暂停所有运行中的任务
示例
轮询数据
const pollingDaemon = new WebDaemon(
async (next, daemon) => {
try {
const response = await fetch('https://api.example.com/data')
const data = await response.json()
console.log('Polled data:', data)
} catch (error) {
console.error('Polling error:', error)
}
next()
},
5000 // 每5秒轮询一次
)
pollingDaemon.start()
动画效果
const animationDaemon = new WebDaemon(
(next, daemon) => {
const progress = (daemon.index / 100) * 100
element.style.opacity = progress + '%'
if (progress >= 100) {
daemon.pause()
}
next()
},
16, // 约60fps
100 // 执行100次
)
animationDaemon.start()
倒计时
const countdownDaemon = new WebDaemon(
(next, daemon) => {
const remaining = 10 - daemon.index
console.log(`Countdown: ${remaining}`)
if (remaining <= 0) {
daemon.pause()
}
next()
},
1000,
10
)
countdownDaemon.start()