async/await 是 Promise 的语法糖:async 函数自动返回 Promise,await 暂停执行直至 Promise 完成且不阻塞线程,支持 try/catch 错误处理和 Promise.all() 并发请求。

async 和 await 让异步代码写得像同步一样清晰,不用嵌套回调、也不用反复写 .then(),关键在于把 Promise 操作“语法糖化”——函数标记为 async 后自动返回 Promise,await 则暂停执行直到 Promise 完成。
async 函数:自动包装成 Promise
只要在函数声明前加 async,这个函数就一定会返回一个 Promise,即使你 return 的是普通值。
- return 数字、字符串、对象 → 自动包装成
Promise.resolve(值) - 抛出错误 → 自动变成
Promise.reject(错误) - 内部可以混用 await,但只能在 async 函数里用
await:等待 Promise 完成,不阻塞线程
await 只能用在 async 函数中,它会让 JS 引擎“暂停”当前函数的执行(实际是让出控制权),等右边的 Promise settle(fulfilled 或 rejected)后再继续。注意:它不会冻结整个页面或主线程。
-
const data = await fetch('/api/user').then(r => r.json())可简写为const data = await (await fetch('/api/user')).json() - await 后面不一定是 Promise,如果不是,会自动转成 resolved 的 Promise
- 出错时直接 throw,可用 try/catch 捕获,比
.catch()更直观
错误处理:用 try/catch 替代 .catch()
以前链式调用要靠每个 .catch() 捕获上一步错误,现在可以直接用同步风格的异常处理:
立即学习“Java免费学习笔记(深入)”;
- 把可能失败的操作包进 try 块,错误统一在 catch 里处理
- 多个 await 连续写,任意一个失败都会跳到 catch,逻辑更紧凑
- 比如:try { const user = await getUser(); const posts = await getPosts(user.id); } catch (err) { console.error('加载失败:', err.message); }
并发请求:别忘了 Promise.all()
await 是串行的,想同时发起多个请求,不能写成多个 await,而要用 Promise.all() 包装:
- ✅ 正确:
const [user, posts] = await Promise.all([fetchUser(), fetchPosts()]); - ❌ 错误:连续 await 会等第一个完成才发第二个,白白浪费时间
- 如果其中某个失败,默认全部失败;需要容错可配合
Promise.allSettled()


















