async/await 是 javascript 中基于 promise 的异步语法糖,使异步代码同步化;async 函数必返回 promise,await 仅限其内使用,需 try/catch 捕获错误,并支持串行与 promise.all 并行执行。

async/await 是 JavaScript 中处理异步操作的现代写法,本质是 Promise 的语法糖,让异步代码看起来像同步代码,更易读、易维护。
async 函数的基本结构
用 async 关键字声明函数,函数内部可使用 await 等待 Promise 完成。注意:await 只能在 async 函数内使用。
- async 函数总是返回一个 Promise,即使你 return 一个普通值,它也会被自动包装成 resolved 的 Promise
- 如果 async 函数中抛出错误,返回的是 rejected 的 Promise
- 示例:async function fetchData() { const res = await fetch('/api/data'); return res.json(); }
await 等待异步操作完成
await 后面跟的是 Promise(或任何值)。如果是 Promise,会等待其 resolve;如果不是,直接返回该值。
- await 会暂停当前 async 函数的执行,但不会阻塞整个主线程(底层仍是基于微任务)
- 多个 await 默认是串行执行的,前一个完成才开始下一个
- 想并行执行多个异步操作,可用 Promise.all([p1, p2, p3]) 包裹后 await
错误处理:try/catch 是标配
await 不会把错误抛到外层,必须用 try/catch 捕获。用 .catch() 也可以,但 try/catch 更直观、更符合同步风格。
- 示例:try { const data = await fetchData(); console.log(data); } catch (err) { console.error('加载失败:', err); }
- 不要只在最外层 try/catch —— 如果中间某步需要单独处理错误(比如重试登录),就在这步加自己的 try/catch
- 避免忘记捕获:没 catch 的 rejected Promise 会变成 unhandled rejection,可能触发全局 error 事件
实际组合场景示例
常见需求如“先登录,再获取用户信息,最后拉取订单列表”,可清晰分步表达:
- const token = await login(username, password);
- const user = await getUser(token);
- const orders = await getOrders(user.id);
- 每一步都可独立加超时、重试或日志,逻辑不耦合
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











