async函数的return值总被自动包装为promise:普通值用promise.resolve()封装,已存在promise直接透传,throw错误等价于promise.reject(),无return或return undefined也返回promise.resolve(undefined)。

在 async 函数中,return 的值总是被自动包装成 Promise,无论你返回的是普通值、Promise 还是 throw 错误。这是理解 async/await 行为的关键前提。
return 普通值(如字符串、数字、对象)
async 函数会把这类值用 Promise.resolve() 包一层,变成 fulfilled 状态的 Promise。
-
例如:
async function f() { return 42; }等价于function f() { return Promise.resolve(42); } - 调用
f()返回的是 Promise,需用await或.then()获取 42
return 已存在的 Promise
如果直接 return 一个 Promise,async 函数不会额外包装,而是“透传”该 Promise 的最终状态和值。
-
例如:
async function g() { return Promise.resolve('ok'); }返回的就是那个 Promise,await 后得到 'ok' - 若 return 拒绝态 Promise(如
Promise.reject(new Error())),async 函数也表现为拒绝,会被await抛出
throw 或未捕获错误
async 函数内部 throw 会立即让函数返回一个 rejected Promise,等同于 return Promise.reject(...)。
-
例如:
async function h() { throw new Error('fail'); }等价于return Promise.reject(new Error('fail')) - 在 await 调用处会被捕获,也可用
.catch()处理
return undefined 或无 return
没有显式 return,或 return undefined,async 函数仍返回 Promise.resolve(undefined)。
- 这和普通函数默认返回
undefined一致,只是被 Promise 包装了 - 所以
async function i() {}和async function j() { return; }行为相同
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











