async箭头函数需将async置于最前,如const fn=async()=>{};支持单/多/解构参数;自动返回promise;调用时须await,且await只能在async上下文中使用。

在箭头函数中使用 async 与 await 是完全可行的,关键在于把 async 作为箭头函数的修饰符,而不是在函数体内单独写 async —— 那样会报错。
正确写法:async 必须紧贴箭头函数声明
箭头函数本身不支持像普通函数那样用 async function 的语法,但可以给整个箭头函数加上 async 前缀,使其成为异步箭头函数:
- ✅ 正确:
const fetchData = async () => { const res = await fetch('/api'); return res.json(); }; - ❌ 错误:
const fetchData = () => { async function inner() { ... } }(async不能出现在语句位置) - ❌ 错误:
const fetchData = () => async () => { ... }(这返回的是一个函数,不是执行异步逻辑)
带参数的 async 箭头函数怎么写
参数写法和普通箭头函数一致,async 始终放在最前面:
- 单参数(省略括号):
const getUser = async id => (await fetch(`/users/${id}`)).json(); - 多参数或无参(必须加括号):
const login = async (username, password) => { /* await 调用 */ }; - 解构参数也支持:
const saveConfig = async ({ host, port }) => { await api.post('/config', { host, port }); };
返回值与 Promise 状态要清楚
async 箭头函数自动返回一个 Promise,即使你 return 普通值,它也会被包装成 Promise.resolve(value):
-
const fn = async () => 'hello';→ 调用fn()返回Promise<string></string> - 如果想让调用方用
await获取结果,必须确保调用的是函数执行结果,而不是函数本身:const data = await fetchData();,不是await fetchData - 错误需主动
throw或让await的 Promise 自然 reject,外部可用.catch()或try/catch
常见陷阱提醒
几个容易出错的地方:
- 忘记在调用处加
await:定义是async,调用不await就只拿到 Promise 对象,不是实际数据 - 在非 async 上下文中直接
await:比如全局作用域(模块顶层除外)、普通函数里 —— 会语法报错,必须包裹在async函数中 - 混淆立即执行与定义:写成
(async () => { ... })();是 IIFE,和赋值给变量的 async 箭头函数用途不同,别混用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











