async/await 是 Promise 的语法糖,使异步代码更直观易读;async 函数自动返回 Promise,await 在 async 内暂停执行并等待 Promise 结果,需配合 try/catch捕获错误。
async/await 是 JavaScript 中处理异步操作的现代语法,它不是新机制,而是 Promise 的语法糖——用同步风格写异步逻辑,让代码更直觉、易读、易调试。
async 函数:自动返回 Promise
加了 async 关键字的函数,无论内部怎么写,返回值都会被自动包装成 Promise:
- 如果函数 return "ok",实际等价于 return Promise.resolve("ok")
- 如果函数 throw new Error(),实际等价于 return Promise.reject(...)
- 普通调用会立刻返回 Promise,仍可用 .then() 或 await 处理
await:在 async 函数里“暂停等待”
await 只能在 async 函数内部 使用,它的作用是:
- 暂停当前函数执行(不阻塞主线程),直到右侧的 Promise 状态确定
- 若 Promise 成功,await 表达式返回其值;若失败,则抛出错误
- 必须配合 try/catch 捕获异常,替代 Promise 的 .catch()
对比传统写法:为什么更简单?
比如连续请求用户和订单数据:
- Promise 链写法:嵌套多层 .then(),错误需单独 .catch(),逻辑断开
- async/await 写法:像同步代码一样逐行写,错误统一用 try/catch 捕获,调试时可直接打断点
- 并行请求也更清晰:await Promise.all([fetchUser(), fetchOrders()]) 一行搞定
常见注意事项
- 不能在顶层 await(如模块最外层),除非用 top-level await(ES2025+,仅限模块环境)
- await 后面最好接 Promise;接普通值会立即返回,但语义上不推荐
- 多个 await 默认串行;想并行就用 Promise.all() 或 Promise.allSettled()
- await 不会阻塞浏览器或 Node.js 主线程,只是暂停当前 async 函数的执行

捕获错误。





