async/await是语法糖,不改变异步本质,async函数自动返回promise,await暂停执行但不阻塞线程,需配合try/catch处理错误,支持串行与并行异步操作。

async/await 本身不“同步化”异步操作,而是让异步代码写起来像同步代码,保持异步本质不变——它只是语法糖,底层仍依赖 Promise 和事件循环。
async 函数自动返回 Promise
声明一个 async 函数,无论函数体内是否显式 return Promise,它都自动包装成 Promise:
- 如果 return 一个普通值(如 return 42),等价于 return Promise.resolve(42)
- 如果 return 一个 Promise(如 return fetch(...)),直接透传该 Promise
- 如果抛出错误(throw new Error()),等价于 return Promise.reject(...)
await 暂停执行但不阻塞线程
await 只能在 async 函数内使用,它会让 JS 引擎暂停当前 async 函数的执行,把控制权交还给事件循环,等右侧的 Promise settle(fulfilled 或 rejected)后再继续。注意:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- await 不是“等待”,而是“让出执行权 + 注册回调”
- 后续代码会被移到微任务队列(microtask queue),在当前同步任务结束后立即执行
- await 后面可以是 Promise、thenable,甚至任意值(非 Promise 会立即 resolve)
串行与并行的写法区别
看似“同步”的写法,实际执行顺序取决于你如何组织 await:
-
串行:逐个 await,前一个完成才开始下一个
const a = await api1();
const b = await api2(a); -
并行:先发起所有请求,再统一 await
const [a, b] = await Promise.all([api1(), api2()]);
错误处理要主动捕获
await 后的 Promise 如果 reject,会以异常形式抛出,必须用 try/catch 捕获,否则会导致整个 async 函数 rejection:
- 不加 try/catch → 错误被抛到调用链上,可能触发 unhandledrejection
- 推荐写法:try { const data = await fetch(...); } catch (err) { ... }
- 也可用 .catch() 链式处理,但会失去 await 的可读性优势
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










