async/await 是 javascript 中基于 promise 的异步语法糖,使异步代码更易读、错误处理更直观;async 函数自动返回 promise,await 只能在 async 函数内使用并暂停当前执行,支持 try/catch 统一捕获异步错误。

async/await 是 JavaScript 中处理异步操作的语法糖,它让基于 Promise 的异步代码写起来更像同步代码,可读性更强、错误处理更直观。
async 函数自动返回 Promise
只要在函数声明前加上 async 关键字,该函数就会自动包装返回值为 Promise。即使你 return 一个普通值,它也会被 Promise.resolve() 包裹;如果 throw 错误,则等价于返回 Promise.reject()。
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
return 42;
}
getValue(); // 返回 Promise
await 只能在 async 函数内使用,用于等待 Promise 完成
await 会暂停当前 async 函数的执行,直到右侧的 Promise 被 resolve 或 reject,然后继续向下运行。它不能用在顶层作用域或普通函数中。
- await 后面可以是 Promise,也可以是任意值(非 Promise 值会被自动转为已 resolve 的 Promise)
- await 会让代码“看起来”是同步的,但底层仍是事件循环驱动的异步机制
- 多次 await 是串行执行的,想并行请用
Promise.all([p1, p2])再 await
错误处理更接近 try/catch 直觉
相比 Promise 链中需要反复写 .catch(),async/await 可以直接用标准的 try/catch 捕获异步错误:
try {
const res = await fetch('/api/user');
if (!res.ok) throw new Error('Network error');
return await res.json();
} catch (err) {
console.error('Failed to load user:', err);
}
}
避免常见误区
- 不要在循环中盲目 await —— 若任务彼此独立,优先考虑
Promise.all()并行发起 - await 不会阻塞整个 JS 线程,只是暂停当前 async 函数,其他任务仍可执行
- 不要用 await 包裹已知同步逻辑(如纯计算),徒增开销
- 注意 this 和箭头函数上下文:async 箭头函数不会绑定自己的 this,适合回调场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










