async函数返回Promise,await暂停执行并获取resolve值,reject则抛错需try...catch;并行用Promise.all,串行await会阻塞;普通返回值自动包装为Promise。

异步函数(async 函数)通过 await 关键字等待 Promise 完成,并直接获取其成功值;若 Promise 被拒绝,则抛出错误,需用 try...catch 捕获。
用 await 获取 Promise 的成功结果
await 只能在 async 函数内部使用,它会暂停函数执行,直到 Promise 兑现(fulfilled),然后返回兑现的值。
- 如果 Promise 成功(
resolve(value)),await promise的结果就是value - 不能
await普通值,但可以——JavaScript 会自动用Promise.resolve()包装它
例如:
async function fetchUser() {const response = await fetch('/api/user');
const user = await response.json(); // 等待 JSON 解析完成
return user;
}
捕获 Promise 失败(reject)的错误
await 遇到被拒绝的 Promise 时,会把拒绝原因当作异常抛出,所以要用 try...catch 处理。
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 不加
try...catch,错误会冒泡,导致 async 函数返回一个 rejected Promise - 在顶层调用时,可用
.catch()或await外层再包一层try...catch
例如:
async function safeFetch() {try {
const res = await fetch('/api/data');
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json();
} catch (err) {
console.error('请求失败:', err.message);
return null;
}
}
并行处理多个 Promise
想同时发起多个异步操作(如并发请求),不要连续 await,而应先创建 Promise,再统一 await Promise.all()。
- 连续
await是串行,耗时累加 -
Promise.all([p1, p2, p3])返回一个新 Promise,所有子 Promise 都成功才兑现;任意一个失败,就立即拒绝 - 需要容错可配合
Promise.allSettled(),它等全部结束,返回每个结果的状态对象
例如:
async function loadUserProfile() {const [user, posts, comments] = await Promise.all([
fetch('/api/user').then(r => r.json()),
fetch('/api/posts').then(r => r.json()),
fetch('/api/comments').then(r => r.json())
]);
return { user, posts, comments };
}
返回值本质仍是 Promise
即使 async 函数里写了 return 42 或 return Promise.resolve(42),它的返回值也总是 Promise。
- 同步返回值会被自动包装成
Promise.resolve(...) - 因此调用 async 函数后,仍可通过
.then()或外层await获取结果 - 不能在普通函数中直接“取到” async 函数的返回值,必须异步消费

















