async/await将promise链转为同步风格代码,提升可读性与错误控制:串行依赖用await依次调用,独立请求用promise.all并行,统一用try/catch捕获异常。

用 async 和 await 写接口调用链,核心是把嵌套的 Promise.then() 拉成“看起来像同步”的代码,逻辑更直、错误更好控、可读性明显提升。
把 Promise 链转成 await 序列
以前写多个依赖接口(比如先登录 → 拿 token → 查用户信息 → 加载权限)得层层嵌套 then,容易掉进“回调地狱”。用 await 就能一行行写下去:
- 每个
await后面接一个返回 Promise 的函数(如fetch、axios.get) - 上一步结果直接赋给变量,下一步就能用,不用传参或写闭包
- 注意:
await只能在async函数里用
串行调用:按顺序等前一步完成再走下一步
适合有强依赖关系的场景,比如必须拿到用户 ID 才能查订单:
async function loadUserAndOrders() {
try {
const userRes = await fetch('/api/login', { method: 'POST' });
const user = await userRes.json();
const orderRes = await fetch(`/api/orders?uid=${user.id}`);
const orders = await orderRes.json();
return { user, orders };
} catch (err) {
console.error('请求失败', err);
}
}
并行调用:用 Promise.all + await 提升性能
如果几个接口彼此独立(比如同时拉 banner、新闻、推荐列表),就别傻等,一起发:
- 用
Promise.all([p1, p2, p3])包住所有 Promise - 再
await它,得到一个数组结果,顺序和传入一致 - 比串行快得多,尤其在网络延迟明显时
async function loadHomeData() {
const [banner, news, rec] = await Promise.all([
fetch('/api/banner').then(r => r.json()),
fetch('/api/news').then(r => r.json()),
fetch('/api/recommend').then(r => r.json())
]);
return { banner, news, rec };
}
错误处理:统一用 try/catch,不用每个 then 写 .catch
await 遇到 reject 会直接抛出,所以一个 try/catch 就能兜住整条链的异常:
- 在
catch里可以统一打日志、提示用户、跳转错误页 - 想区分不同接口失败?检查
err.response?.status或自定义错误类型 - 某些接口失败不影响整体(比如埋点上报),可用
.catch(() => null)屏蔽
不复杂但容易忽略:别忘了在调用处也用 await 或 .then() 处理返回值,不然函数只是返回一个 pending 的 Promise。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











