Skip to content

notthistrain/serial-blocking-queue

Repository files navigation

🧩 Serial Blocking Queue

一个支持动态插入、中断恢复的阻塞式异步任务串行执行队列库。适用于需要按顺序执行异步任务并控制流程的场景。

✨ 特性

  • 🔁 串行执行:所有任务按添加顺序依次执行(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)

📚 API 文档

new SerialBlockingQueue()

创建一个新的串行阻塞队列实例。

offerTail(job: Job): void

将一个异步任务添加到队列尾部。

offerHead(job: Job): void

将一个异步任务添加到队列头部。

abort(): void

中断当前正在执行的任务,并阻止后续任务继续执行。

recover(): void

恢复被中断的任务流程,并继续执行剩余任务。

serialConsume(): Promise<void>

开始串行消费队列中的任务。如果队列为空或已中断,则不会执行任何操作。


🧪 单元测试

本项目使用 Vitest 编写单元测试,覆盖了以下场景:

  • ✅ 任务顺序执行
  • ✅ 插入头部任务优先执行
  • ✅ 支持中断
  • ✅ 支持恢复
  • ✅ 阻塞机制验证

运行测试:

npm run test

🛠️ 构建工具

  • 使用 TypeScript 编写,提供完整的类型定义。
  • 使用 tsup 打包,输出 ESM 和 CJS 格式。
  • 发布至 npmjs

🤝 贡献

欢迎提交 Issue 和 PR!如果你有新的功能需求或优化建议,请随时提出。


📄 License

MIT © notthistrain


About

Asynchronous queue for blocking execution

Resources

Stars

Watchers

Forks

Packages

No packages published