async函数返回值总是promise对象,即使return基本类型也会被promise.resolve包装;可用await直接获取解析值,或用.then()链式处理;return promise时会自动await并透传结果。

async 函数内部的返回值会自动被包装成一个 Promise 的 resolved 值,外层可通过 await 或 .then() 获取。
async 函数的返回值本质是 Promise
即使你写的是 return 42 或 return "hello",async 函数也总是返回一个 Promise 对象。这个 Promise 的状态为 fulfilled,其 value 就是你 return 的值。
-
async function foo() { return 123; }等价于function foo() { return Promise.resolve(123); } -
async function bar() { throw new Error("oops"); }等价于function bar() { return Promise.reject(new Error("oops")); }
用 await 接收返回值(推荐,最直观)
在另一个 async 函数中,用 await 调用该函数,就能直接拿到 return 的原始值(不是 Promise):
async function getData() {
return { id: 1, name: "Alice" };
}
async function main() {
const result = await getData(); // ✅ result 是对象,不是 Promise
console.log(result.name); // "Alice"
}
用 .then() 接收返回值(兼容非 async 环境)
如果调用方不是 async 函数,就只能用 Promise 链的方式处理:
async function getData() {
return [1, 2, 3];
}
getData().then(arr => {
console.log(arr.length); // 3 ✅
});
注意:不能直接写 const arr = getData(); console.log(arr.length) —— 因为 arr 是 Promise 实例,还没 resolve,此时 length 是 undefined。
return 的 Promise 会被自动 await(链式扁平化)
如果你在 async 函数里 return 一个 Promise,它不会被“双重包装”,而是自动等待并透传结果:
async function fetchUser() {
return fetch('/api/user').then(res => res.json()); // 返回 Promise
}
// 等价于:
async function fetchUser() {
const res = await fetch('/api/user');
return res.json(); // 这个 json() 也返回 Promise,但会被自动处理
}
无论你 return 普通值、Promise 还是另一个 async 函数调用,最终外层拿到的都是解析后的值。











