promise延迟处理队列本质是按序可控执行异步任务,通过维护任务队列、惰性执行与递归调度实现;支持暂停/恢复/清空、优先级控制、错误策略及分块并行混合模式。

Promise 的延迟处理队列,本质是控制异步任务按序、可控地执行,而不是立即触发。它不依赖定时器堆叠,而是利用 Promise 链的“惰性”和“可挂起”特性,把任务暂存、逐个释放。
用 Promise 构造器 + 队列数组实现可控延迟
核心思路:维护一个任务队列,每个任务是一个返回 Promise 的函数;每次只运行队列头部任务,并在它 resolve 后才拉取下一个。
- 初始化一个空数组作为队列,一个标志位(如 isRunning)防止并发执行
- 提供 push(task) 方法:task 是 () => Promise,只推入不执行
- 提供 start() 或自动触发机制:取出首个任务执行,完成后递归调用自身处理下一个
- 可在任务之间插入 delay(ms),例如用
await new Promise(r => setTimeout(r, ms))
封装成类,支持暂停/恢复/清空
增强实用性:延迟队列常需应对用户交互中断(如取消操作、优先级调整)。
- 添加 pause():设 isRunning = false,但保留当前队列和位置
- 添加 resume():恢复执行,从上次中断处继续
- 添加 clear():清空未执行任务,避免内存堆积
- 可为每个任务附加 meta(如 id、priority),支持按条件过滤或跳过
结合 async/await 与队列状态管理
避免“回调地狱”,让流程更直观。关键在于不让任务直接 await,而是统一由调度器 await。
- 调度器内部用 async function next() 处理单个任务,包含 try/catch 错误拦截
- 错误发生时,可选择跳过当前任务、重试、或终止整个队列(由配置决定)
- 对外暴露 nextTask 属性或 onTaskStart/onTaskEnd 回调,便于监控进度
- 示例场景:上传文件队列,每个任务含进度上报,失败后自动重试 2 次再进下一任务
用 Promise.allSettled 实现并行+顺序混合模式
某些场景需要“分批延迟执行”,比如每 3 个任务一组,组内并行,组间延迟。
- 将原始队列按 size 分块:
chunk(arr, 3) - 对每一块调用 Promise.allSettled(chunk),等待整块完成
- 块之间用 await delay(1000) 隔开,实现节奏控制
- 比纯串行快,比全并行稳,适合批量 API 调用且有频控要求的场景











