async 关键字声明异步函数,自动返回 promise 并支持 await;可用于函数声明、箭头函数、对象方法和类方法;返回值被自动包装为 promise,await 仅限 async 函数内使用;async 不代表并发,首 await 前仍同步执行。

在 JavaScript 中,async 关键字用于声明一个函数是异步的,它会让函数自动返回一个 Promise,并允许你在函数内部使用 await 来暂停执行、等待 Promise 完成。
async 函数的基本写法
只需在 function 关键字前加上 async 即可。箭头函数同样支持:
-
function 声明:
async function fetchData() { ... } - 箭头函数:
const fetchData = async () => { ... }; - 对象方法:
const obj = { async getData() { ... } }; - 类方法:
class Api { async fetch() { ... } }
async 函数一定返回 Promise
即使你 return 一个普通值,async 函数也会把它包装成 resolved 的 Promise:
-
async function f() { return 42; }等价于return Promise.resolve(42) -
async function f() { throw new Error('oops'); }等价于return Promise.reject(new Error('oops')) - 调用时必须用
.then()或await处理返回值
await 只能在 async 函数内部使用
await 用于等待 Promise 结果,但它不能出现在普通函数或全局作用域中:
- ✅ 正确:
async function f() { const data = await fetch('/api').then(r => r.json()); } - ❌ 错误:
function f() { const data = await fetch('/api'); }(语法错误) - ❌ 错误:
await fetch('/api');(顶层 await 仅在 ES 模块顶层有效,非函数内)
常见误区提醒
async 不等于“立刻并发执行”,它只是让函数具备异步能力:
- 多个 async 函数顺序调用仍是串行的,除非显式用
Promise.all()并发触发 - async 函数本身是同步执行到第一个 await(或结束),之后才让出控制权
- 不要滥用 async:无 Promise 操作的纯同步函数加 async 反而增加开销
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











