async/await 将嵌套 promise.then() 转为线性同步风格代码,支持错误处理;可配合 promise.all 并发请求;需按需用局部 try/catch、.catch() 或状态控制实现细粒度逻辑;async 函数始终返回 promise。

用 async/await 简化多层异步流,核心是把嵌套的 Promise.then() 链式调用,转成看起来像同步代码的线性写法,同时保留异步行为和错误处理能力。
把 Promise 链转成 await 序列
以前写多层依赖的异步操作(比如先登录、再获取用户信息、再拉取订单列表),容易写成“回调地狱”或长链 then:
login().then(user => getUserProfile(user.id))<br> .then(profile => getOrderList(profile.userId))<br> .then(orders => console.log(orders))<br> .catch(err => console.error(err));
用 async/await 就变成清晰的三步:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
async function fetchOrders() {<br> try {<br> const user = await login();<br> const profile = await getUserProfile(user.id);<br> const orders = await getOrderList(profile.userId);<br> console.log(orders);<br> } catch (err) {<br> console.error(err);<br> }<br>}
并行请求用 Promise.all + await
如果几路请求彼此独立(比如同时查用户、公告、未读消息),不要傻等一个接一个,用 Promise.all 并发发起:
async function loadDashboard() {<br> try {<br> const [user, notices, unread] = await Promise.all([<br> fetchUser(),<br> fetchNotices(),<br> fetchUnreadCount()<br> ]);<br> render({ user, notices, unread });<br> } catch (err) {<br> // 注意:Promise.all 任一失败就 reject,需统一捕获<br> console.error('加载首页出错', err);<br> }<br>}
按需控制执行顺序与错误边界
不是所有步骤都适合扁平 await。有些场景需要更细粒度控制:
- 某一步失败不影响后续(比如“尝试加载头像,失败就用默认图”):用
.catch(() => defaultAvatar)或封装成不抛错的工具函数 - 想区分不同步骤的错误(如登录失败 vs 数据拉取超时):在每个
await后加局部try/catch,而不是只包整个函数 - 需要节流或防重复提交:在
await前加状态标记(如if (loading) return)
注意 async 函数本身的返回值
async 函数总会返回一个 Promise,即使你 return 123,实际返回的是 Promise.resolve(123)。所以调用它时仍要 await 或接 .then:
async function getValue() { return 42; }<br>getValue().then(console.log); // 42<br>// 或<br>async function useIt() {<br> const x = await getValue(); // x 是 42,不是 Promise<br>}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










