async/await 是 JavaScript 中基于 Promise 的异步语法糖,使异步代码更直观;async 函数自动返回 Promise,await 在其内部暂停执行并等待 Promise 完成,需用 try/catch 捕获错误,支持串行与并行控制,但不改变异步本质。

async/await 是 JavaScript 中处理异步操作的语法糖,它让基于 Promise 的异步代码写起来像同步代码一样直观,大幅降低回调嵌套和错误处理的复杂度。
async 函数:自动返回 Promise 的函数
在函数声明前加 async 关键字,该函数就变成异步函数。它会自动把返回值包装成 Promise;即使你 return 一个普通值(比如 return 42),也会等价于 Promise.resolve(42)。如果函数中抛出错误,则等价于 Promise.reject(error)。
- 不能直接用
await在普通函数或全局作用域中 —— 必须在async函数内部使用 -
async函数本身不执行异步操作,只是提供await的执行环境
await:暂停执行,等待 Promise 完成
await 只能在 async 函数中使用,它会让 JS 引擎“暂停”当前函数的执行(实际是让出线程,不阻塞主线程),直到右侧的 Promise 被 fulfilled 或 rejected。之后继续执行后续语句。
-
const data = await fetch('/api/user').then(res => res.json())→ 简洁写法:const response = await fetch('/api/user'); const data = await response.json(); - await 后面不一定是 Promise,也可以是任意值:非 Promise 值会被自动转为
Promise.resolve(value) - 错误需用 try/catch 捕获,因为 rejected 的 Promise 会以异常形式抛出
对比传统 Promise 链,更清晰的错误处理与流程控制
以前用 .then().catch() 容易出现“错误被吞掉”或多个 catch 分散的问题;而 async/await 把逻辑收束在统一的 try/catch 块里,条件分支、循环、重试逻辑也更容易组织。
立即学习“Java免费学习笔记(深入)”;
- 多个请求串行:
await api1(); await api2(); await api3();—— 顺序明确,无嵌套 - 并行请求:
const [a, b] = await Promise.all([fetchA(), fetchB()]); - 带错误重试:
for (let i = 0; i setTimeout(r, 1000)); } }
注意点:不是万能银弹,仍需理解 Promise 本质
await 并不会让异步变同步,它只是语法层面的简化。底层仍是事件循环和微任务队列。滥用 await(比如本可并行却写成串行)反而会拖慢性能。
- 避免在循环中无脑 await(除非真要串行)→ 考虑
Promise.all或Promise.allSettled - await 后的 Promise 如果没被处理(没 try/catch),未捕获的 rejection 会触发
unhandledrejection事件 - 不要在 for-in / for-of 循环中直接 await 异步操作(除非有意串行);数组遍历时可用
map + Promise.all











