async/await 让异步代码像同步一样可读,async 函数自动返回 promise,await 只能在 async 函数中使用以暂停执行并等待 promise 结果,推荐用 try/catch 统一处理错误,支持串行与并行(如 promise.all)控制流程。

用 async 和 await 写异步代码,核心是让 Promise 链变“像同步一样读”,不用嵌套 .then(),也不用手动处理错误链。
async 函数自动返回 Promise
只要在函数声明前加 async,这个函数就一定会返回一个 Promise,即使你 return 123,实际返回的是 Promise.resolve(123)。
这样你就能直接用 await 等待它的结果,也方便被其他 async 函数调用:
- 普通函数返回值 → 同步值
-
async function() { return 42; }→ 返回Promise - 函数里
throw new Error()→ 返回Promise.reject(...)
await 只能在 async 函数里用
await 的作用是暂停当前 async 函数的执行,等待右侧的 Promise settle(成功或失败),然后继续往下走。它不能用在普通函数或全局作用域中。
常见写法示例:
async function fetchUser() {
try {
const res = await fetch('/api/user');
const user = await res.json();
console.log(user.name);
} catch (err) {
console.error('加载失败:', err);
}
}
对比传统写法:fetch().then(r => r.json()).then(...).catch(...),结构更平、错误更集中。
多个异步操作:串行 vs 并行
想按顺序等一个完成再执行下一个,就连续写多个 await;想同时发起多个请求(比如拉用户、订单、配置),就先用 Promise.all() 包装,再 await 它:
- 串行(有依赖):
const a = await step1(); const b = await step2(a); - 并行(无依赖):
const [user, orders] = await Promise.all([fetchUser(), fetchOrders()]); - 注意:
Promise.all()任一失败就整体 reject;如需容错,可用Promise.allSettled()
错误处理推荐用 try/catch
await 后面的 Promise 被 reject,会直接抛出异常,所以最自然的方式就是用 try/catch 捕获。它比链式 .catch() 更直观,也支持一次捕获多个 await 的错误。
小技巧:
- 不想中断流程?可给 await 行加空
catch:await promise().catch(() => {}); - 需要区分不同错误类型?在
catch里用if (err instanceof TypeError)判断 - 避免忘记处理错误 —— 每个顶层
await最好都有对应catch或向上 throw
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











