一个支持动态插入、中断恢复的阻塞式异步任务串行执行队列库。适用于需要按顺序执行异步任务并控制流程的场景。
- 🔁 串行执行:所有任务按添加顺序依次执行(FIFO)
- ⏮️ 头部插入:支持将任务插入到队列最前端
- ⛔ 中断执行:通过
abort()
中断当前及后续任务 - 🔁 恢复执行:通过
recover()
恢复被中断的任务流 - 🧠 阻塞机制:保证同一时间只有一个任务在运行
npm install serial-blocking-queue
import { SerialBlockingQueue } from 'serial-blocking-queue'
import type { EAysnc } from 'serial-blocking-queue'
const queue = new SerialBlockingQueue()
// 添加任务到队列尾部
queue.offerTail({ type: EAysnc.Timeout, delay: 200, fn: () => console.log("job tail")})
// 添加任务到队列头部
queue.offerHead({ type: EAysnc.Raf, delay: 200, fn: () => console.log("job head")})
// 开始执行任务
queue.serialConsume()
输出结果:
job head
job tail
queue.abort() // 中断任务
setTimeout(() => {
queue.recover() // 恢复执行
}, 2000)
创建一个新的串行阻塞队列实例。
将一个异步任务添加到队列尾部。
将一个异步任务添加到队列头部。
中断当前正在执行的任务,并阻止后续任务继续执行。
恢复被中断的任务流程,并继续执行剩余任务。
开始串行消费队列中的任务。如果队列为空或已中断,则不会执行任何操作。
本项目使用 Vitest 编写单元测试,覆盖了以下场景:
- ✅ 任务顺序执行
- ✅ 插入头部任务优先执行
- ✅ 支持中断
- ✅ 支持恢复
- ✅ 阻塞机制验证
运行测试:
npm run test
- 使用 TypeScript 编写,提供完整的类型定义。
- 使用 tsup 打包,输出 ESM 和 CJS 格式。
- 发布至 npmjs
欢迎提交 Issue 和 PR!如果你有新的功能需求或优化建议,请随时提出。
MIT © notthistrain