插件开发范式
Async 异步组合工具
可独立使用的任务合并、有界迭代、并发控制与依赖图工具。
@pluxel/async 是零运行时依赖的 TypeScript / JavaScript 工具包。它可用于普通服务、脚本和数据处理,不需要 Pluxel Plugin、Context 或 Host。
实现前确定任务契约
涉及并发、取消或重试时,先明确以下边界,再选择工具。即使只用原生 Promise,也需要这些决定:
- 任务归请求还是 Plugin generation 所有;停止接纳后如何等待在途工作退出。
- 取消表示调用者不再等待,还是底层 IO 真正结束;并发额度应在真实工作结束时释放。
- 重试哪些失败、最多多少次、何时终止;有副作用的操作先确认幂等性或提交结果,不盲目重放。
- 共享在途结果、并发限额和时间限速分别解决不同问题;不叠加具有相同职责的调度器。
Plugin 资源与停止语义见生命周期。本页选择组合工具,参数与具体失败/取消语义由下方包内指南维护。
可以做什么
| 场景 | 工具 | 解决的问题 |
|---|---|---|
| 多个调用者同时读取同一资源 | singleflight | 共享一次在途任务,各自可以放弃等待 |
| 流式读取、转换和批量保存 | iter | 限制接纳窗口,以 AsyncIterable 串联处理 |
| 多处调用共享资源额度 | limit / keyedLimit | 控制同时执行的数量,或按资源 key 串行执行 |
| 可恢复的临时失败 | retry | 显式授权有限重试,退避时可以取消 |
| 等待就绪或放弃一个结果 | wait | 延迟、独立等待取消、串行轮询 |
| 多个步骤共享依赖 | grfn | 编译可复用的依赖图,明确选择输出与失败收尾方式 |
例如 Cache 已使用 singleflight 管理在途任务,同时自己保留容量限制、统计和写入屏障。其他领域也通过原生 Promise、Iterable / AsyncIterable 和 AbortSignal 组合,不需要 Pluxel 专用适配层。
从小组合开始
单一需求直接选择一个子路径;复杂场景再组合。比如 limit + waitFor 让调用者停止等待而真实 IO 继续持有额度,singleflight + Pacer RateLimiter 合并重复读取后再检查时间额度。
本包的并发限制不等于时间限速,在途合并也不等于防抖。需要防抖、节流、优先级队列或响应式状态时,可结合 TanStack Pacer,不必在两边重复配置同一种调度策略。
安装与详细用法
npm install @pluxel/asyncNode.js 24+、ESM;按子路径导入,例如 @pluxel/async/singleflight。
本页概述用途;参数、默认值和组合细节由包内文档统一维护,并随 npm 制品发布。
最后更新于