async函数返回promise对象,需用await(在async函数内)或.then()(在非async环境)获取结果;返回值自动包装为promise.resolve(),await会抛出reject错误需try/catch捕获。

async 函数返回的是一个 Promise 对象,所以获取其结果必须通过 Promise 的方式处理,不能直接拿到“最终值”。
用 await 等待 async 函数执行完成
在另一个 async 函数内部,可以用 await 直接获取 async 函数的返回值(即 resolve 的值)。
- await 只能在 async 函数中使用,否则会报语法错误
- await 后面跟的是 Promise,它会自动等待 Promise settle,并返回 fulfilled 的值
- 如果 Promise 被 reject,await 会抛出错误,需要用 try/catch 捕获
例如:
async function fetchData() {return 'data';
}
async function main() {
try {
const result = await fetchData(); // result 是 'data'
console.log(result);
} catch (err) {
console.error(err);
}
}
用 .then() 链式获取返回值
async 函数本身返回 Promise,所以可以直接调用 .then() 和 .catch() 处理。
- 适合在非 async 环境(如普通函数、事件回调、模块顶层)中使用
- .then() 的回调参数就是 async 函数 resolve 的值
- .catch() 捕获 async 函数中 throw 的错误或 Promise reject
例如:
async function getData() {throw new Error('fail');
}
getData()
.then(value => console.log(value))
.catch(err => console.error(err.message)); // 输出:fail
注意返回值类型和隐式包装
async 函数无论 return 什么,都会被包装成 Promise.resolve() 的结果。
- return 一个普通值(如字符串、对象),等价于 Promise.resolve(值)
- return 一个 Promise,会原样返回(不会嵌套)
- 不写 return 或 return undefined,等价于 Promise.resolve(undefined)
也就是说,以下三种写法效果一致:
async function f1() { return 42; }async function f2() { return Promise.resolve(42); }
async function f3() { return Promise.reject(42); } // 注意:这个会 reject
避免常见误区
容易误以为调用 async 函数就能立刻拿到结果,其实只是拿到 Promise。
- ❌ const res = fetchUser(); console.log(res); // 输出 Promise {
} - ✅ const res = await fetchUser(); console.log(res); // 输出实际数据
- ❌ 在循环中直接 await 多个 async 函数(会串行执行)——如需并发,改用 Promise.all()
比如并发请求多个用户:
const promises = [fetchUser(1), fetchUser(2), fetchUser(3)];const results = await Promise.all(promises); // 一次性等待全部完成











