async/await是promise的语法糖,async函数自动返回promise,await暂停执行但不阻塞线程,支持try/catch错误处理,并通过promise.all实现并行执行。

async/await 不是新机制,而是 Promise 的语法糖——它不改变异步本质,只让写法和阅读更接近同步逻辑,同时保留非阻塞执行能力。
async 函数:自动返回 Promise
用 async 声明的函数,无论内部 return 什么,返回值都会被自动包装成 Promise:
- return 一个普通值 → 等价于
Promise.resolve(值) - throw 一个错误 → 等价于
Promise.reject(错误) - 不写 return → 默认返回
Promise.resolve(undefined)
await 关键字:暂停执行,但不阻塞线程
await 只能在 async 函数内部使用,作用是“等待”右侧 Promise 的 settled 状态(fulfilled 或 rejected),然后取得结果:
- 遇到 await 时,当前函数暂停,控制权交还事件循环,主线程继续处理其他任务
- Promise 完成后,await 表达式返回其 resolved 值(或抛出 rejected 错误)
- await 后面可以是 Promise、thenable 对象,甚至普通值(会立即返回)
错误处理:用 try/catch 更自然
相比 Promise 的 .catch(),async/await 支持直接用同步风格的 try/catch 捕获异步错误:
- 网络请求失败、JSON 解析出错、await 后的 Promise 被 reject,都会进入 catch 块
- 多个 await 可共用一个 try/catch,避免重复写 .catch
- 注意:未被 catch 的错误仍会变成 rejected Promise,需在调用处处理
串行与并行:控制执行节奏的关键
await 天然是串行的,但需要并行时,可提前发起多个 Promise,再 await 它们:
- 串行(依次等待):
const a = await fetchA(); const b = await fetchB(); - 并行(同时发起):
const [a, b] = await Promise.all([fetchA(), fetchB()]); - 部分失败可接受时,可用
Promise.allSettled()替代











