javascript async/await是什么_如何简化异步

async/await 是 Promise 的语法糖,使异步代码更直观易读;async 函数自动返回 Promise,await 在 async 内暂停执行并等待 Promise 结果,需配合 try/catch 捕获错误。

async/await 是 JavaScript 中处理异步操作的现代语法,它不是新机制,而是 Promise 的语法糖——用同步风格写异步逻辑,让代码更直觉、易读、易调试。

async 函数:自动返回 Promise

加了 async 关键字的函数,无论内部怎么写,返回值都会被自动包装成 Promise:

  • 如果函数 return "ok",实际等价于 return Promise.resolve("ok")
  • 如果函数 throw new Error(),实际等价于 return Promise.reject(...)
  • 普通调用会立刻返回 Promise,仍可用 .then()await 处理

await:在 async 函数里“暂停等待”

await 只能在 async 函数内部 使用,它的作用是:

  • 暂停当前函数执行(不阻塞主线程),直到右侧的 Promise 状态确定
  • 若 Promise 成功,await 表达式返回其值;若失败,则抛出错误
  • 必须配合 try/catch 捕获异常,替代 Promise 的 .catch()

对比传统写法:为什么更简单?

比如连续请求用户和订单数据:

  • Promise 链写法:嵌套多层 .then(),错误需单独 .catch(),逻辑断开
  • async/await 写法:像同步代码一样逐行写,错误统一用 try/catch 捕获,调试时可直接打断点
  • 并行请求也更清晰:await Promise.all([fetchUser(), fetchOrders()]) 一行搞定

常见注意事项

  • 不能在顶层 await(如模块最外层),除非用 top-level await(ES2025+,仅限模块环境)
  • await 后面最好接 Promise;接普通值会立即返回,但语义上不推荐
  • 多个 await 默认串行;想并行就用 Promise.all()Promise.allSettled()
  • await 不会阻塞浏览器或 Node.js 主线程,只是暂停当前 async 函数的执行