async/await 是 javaScript 中基于 promise 的 异步 语法糖,使异步代码更直观;async 函数自动返回 Promise,await 暂停执行等待 Promise 完成,需用 try/catch 错误处理,并行任务应配合 Promise.all()。

async/await 是 javascript 中处理异步操作的语法糖,它让基于 Promise 的异步代码写起来像同步代码一样直观、易读、易维护。 它没有改变异步本质,只是提供了更简洁的写法,避免了 Promise 链式调用(.then().then())和回调地狱。
async 函数:自动返回 Promise
在函数声明前加 async 关键字,这个函数就变成了“异步函数”。它会自动把返回值包装成 Promise —— 即使你 return 一个普通值,也会被 resolve;如果抛出错误,会被 reject。
- return 123 → 等价于 Promise.resolve(123)
- throw new Error(‘oops’) → 等价于 Promise.reject(new Error(‘oops’))
- 不写 return → 等价于 Promise.resolve(undefined)
await:暂停执行,等待 Promise 完成
await 只能在 async 函数内部使用 。它会让 js 引擎暂停当前 async 函数的执行(但不会阻塞 主线程),等待右侧的 Promise settle(fulfilled 或 rejected),然后继续执行。
- await fetch(‘/api/user’) → 等待网络请求完成,拿到 Response 对象
- await response.json() → 等待解析 json 完成,拿到数据对象
- await 后面不一定是 Promise,非 Promise 值会被自动转为 Promise.resolve(value)
错误处理:用 try/catch 替代 .catch()
因为 await 让异步流程看起来是“线性”的,所以可以用熟悉的 try/catch 捕获错误,比链式 .catch() 更自然、更贴近同步逻辑。
立即学习“Java 免费学习笔记(深入)”;
- 所有 await 行都可被同一个 try/catch 包裹,不用每个都写 .catch()
- reject 的 Promise 会直接抛出异常,进入 catch 块
- 示例:try {const data = await fetch(‘/api’).then(r => r.json()); } catch (err) {console.error(‘ 请求失败 ’, err); }
并行执行多个 异步任务:别忘了 Promise.all()
await 是串行的 —— 写两个 await 就是等完第一个再等第二个。想同时发起多个请求(比如拉用户信息 + 拉订单列表),应该先创建 Promise,再 await Promise.all()。
- ❌ 错误(串行,慢):const user = await getUser(); const orders = await getOrders();
- ✅ 正确(并行,快):const [user, orders] = await Promise.all([getUser(), getOrders()]);
- 注意:Promise.all() 中任一 Promise reject,整个就会失败;如需容错,可用 Promise.allSettled()
基本上就这些。async/await 不复杂,但容易忽略细节 —— 记住 async 返回 Promise、await 只在 async 里用、错误用 try/catch、多任务记得用 Promise.all(),异步代码就能既清晰又高效。
以上就是