没有 await 的 async 函数执行表现与同步函数几乎相同:立即同步执行函数体并返回已 resolve 的 promise;返回值必为 promise,需 .then() 或 await 消费;不阻塞主线程但无性能提升,常用于统一接口返回类型。

没有 await 的 async 函数,执行表现和普通同步函数几乎一样——它会立即同步执行完函数体,然后返回一个已 resolve 的 Promise,不会造成任何异步延迟。
函数体完全同步执行
async 函数声明本身不引入异步行为。只要内部没有 await、没有 Promise 构造、没有定时器或 I/O 操作,整个函数体就像普通函数一样逐行运行:
- 所有 console.log、变量赋值、计算逻辑都在调用瞬间完成
- return 的值立刻被包装成 Promise.resolve(...),Promise 状态随即变为 fulfilled
- 但这个 Promise 的 .then() 回调仍属于微任务,要等当前同步代码执行完才触发
返回值始终是 Promise
无论有没有 await,async 函数的返回值一定是 Promise:
- return 123 → 等价于 Promise.resolve(123)
- return undefined 或无 return → 等价于 Promise.resolve(undefined)
- throw new Error() → 等价于 Promise.reject(...)
这意味着你不能直接拿到返回值,必须用 .then() 或外层 await 消费。
不会阻塞主线程,但也不“变快”
它不创建新线程,不跳过事件循环,只是语法上强制返回 Promise:
- 执行过程不卡顿,因为没做任何耗时操作
- 但也不会比普通函数更快——它多了一次 Promise 封装开销(极小)
- 常见用途是统一接口:让同步逻辑和异步逻辑对外都返回 Promise,便于链式调用或统一错误处理
适合做“占位型”或“兼容性封装”
比如在需要统一返回 Promise 的 API 层中,某些分支逻辑暂时是纯同步的:
- 缓存命中时直接返回数据,用 async + return 避免类型不一致
- 配置开关关闭时跳过异步请求,用 async 函数兜底返回默认值
- 避免在 if/else 中混用同步返回值和 Promise,保持调用方式一致
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











