组合式 API 中控制异步任务并发与顺序加载,核心是合理使用 ref/reactive 管理状态、await 显式串行、Promise.allSettled 控制并行且保序、ref 防重复触发,以及自定义并发队列限流。

组合式 API 中控制异步任务并发、保证接口按序加载,核心在于合理使用 ref / reactive 管理状态、用 await 显式串行、或借助 Promise.allSettled / Promise.all 控制并行粒度,必要时配合防抖、节流或队列调度。
用 await 保证严格顺序执行
如果多个请求必须按固定顺序发起(比如后一个依赖前一个返回的 ID),最直接的方式是在 setup 或 onMounted 中用 async/await 逐个调用:
- 每个请求封装为独立函数,返回 Promise
- 用
await依次等待,天然形成串行链 - 错误需主动捕获(
try/catch),避免中断后续逻辑
示例:获取用户 → 再查其订单 → 最后拉取订单详情
用 Promise.allSettled 控制有限并发 + 保持响应顺序
当多个请求彼此独立但需“一起发起、按原顺序处理结果”(如首页多个模块数据),Promise.allSettled 是更稳妥的选择:
- 所有请求并行发出,不相互阻塞
- 结果数组严格对应输入 Promise 的顺序,无需手动映射
- 即使某个失败,其余仍继续执行,适合容错场景
注意:不要用 Promise.all,它遇到任一拒绝就整体 reject,无法保障部分成功时的数据可用性。
用 ref 标记加载状态 + 防重复触发
用户频繁点击或路由快速切换时,容易导致同一接口被多次调用。可在组合式逻辑中用 ref 控制开关:
- 定义
const isLoading = ref(false) - 请求前判断
if (isLoading.value) return - 请求开始设为
true,结束(无论成功失败)设回false
这不解决并发数,但能防止“同一任务被无意叠加”,是顺序加载的前置保障。
进阶:自定义并发队列(如限制最多 3 个请求同时进行)
对资源敏感场景(如上传大量文件、批量调用第三方 API),可手写轻量队列:
- 维护一个长度为 N 的 Promise 数组(如
activePromises) - 每次新增任务时,先
Promise.race(activePromises)等待任一完成,再 push 新 Promise - 用
ref跟踪当前并发数,配合watchEffect自动调度
不需要引入额外库,几十行代码即可实现可控并发,适合中后台复杂列表页或导出任务管理。

















