async/await 是 promise 的语法糖,async 函数自动返回 promise,await 在 async 内暂停执行并等待 promise 结果,支持 try/catch 错误处理,并行请求推荐用 promise.all 或 allsettled。

async 和 await 不是魔法,而是 Promise 的清晰封装——它不改变异步本质,但让代码读起来像同步一样自然。
async 函数:自动返回 Promise
只要函数前加 async,它就变成一个“承诺制造机”:无论你 return 什么,都会被自动包装成 Promise。
- return 字符串 → 等价于
Promise.resolve("xxx") - throw 错误 → 等价于
Promise.reject(new Error(...)) - 即使没写 await,函数也一定是异步的,调用后必须用
.then()或外层 await 消费
await:在 async 内暂停等待结果
await 只能在 async 函数里用,它不是阻塞线程,而是暂停当前函数执行,把控制权交还给事件循环。
- 后面必须跟一个 Promise(或能转成 Promise 的值,比如 fetch()、new Promise)
- Promise 成功时,await 表达式直接得到
resolve的值 - Promise 失败时,会抛出错误,必须用
try/catch捕获,否则函数直接 reject
多个请求:别盲目串行,按需选并行
连续写多个 await 是串行执行,耗时累加;多数场景其实可以并行发起。
- 全部要成功才继续 → 用
Promise.all([p1, p2, p3]) - 想拿到每个结果,不管成败 → 用
Promise.allSettled([p1, p2, p3]) - 后一步依赖前一步结果(如先登录再拿用户数据)→ 才用链式 await
错误处理:用 try/catch 更直观
比起 Promise 的 .catch(),async/await 中的 try/catch 更贴近同步逻辑,也更容易定位哪一步出错。
- 每个 await 都建议包裹在 try 块里,或至少最外层 try 包住整个流程
- HTTP 错误(如 404、500)不会自动 reject,需手动检查
response.ok并 throw - 避免只 console.error 却不 re-throw,否则上层无法感知失败
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











