在现代前端开发以及 AI 全栈开发中,异步编程(Asynchronous Programming)是避不开的核心大山。无论是处理传统的后端数据接口,还是对接大语言模型(LLM)的流式响应,吃透 Promise 及其并发控制都是检验一个前端/全栈工程师基本功的试金石。
今天这篇博客,我们就用最直白的逻辑,彻底拆解 Promise 的核心状态、all 与 race 的区别,以及如何在真实项目中手动限制最大并发请求数。
🏗️ 一、 Promise 的底层:状态机与“终身制”限制
JavaScript 是单线程的,而 Promise 的出现就是为了优雅地解决“回调地狱”。从机制上来说,Promise 本质上是一个状态机。
它一共拥有三种状态:
Pending(等待中):初始状态,异步操作还在进行中。
Fulfilled(已成功):调用了 resolve(),意味着任务顺利完工。
Rejected(已失败):调用了 reject(),意味着中途掉链子。
📌 核心铁律:状态凝固
Promise 的状态转换具有原子性和不可逆性:
状态只能由 Pending ➔ Fulfilled 或者 Pending ➔ Rejected。
一旦状态发生改变,它就会立刻**“凝固”**。此后无论你重复调用多少次 resolve 或


