async/await 是基于 Promise 的语法糖,使异步代码更易读、错误处理更直观;async 函数必返回 Promise,await 只能在 async 函数内使用,用于等待 Promise 完成并自动解包,需用 try/catch 捕获异常。

JavaScript 的异步函数(async function)和 await 是处理异步操作的现代语法糖,它们让原本基于回调或 Promise 链的代码变得更像同步写法,可读性更强、错误处理更直观。
异步函数的本质是返回 Promise 的普通函数
用 async 关键字声明的函数,无论内部是否含异步操作,都会自动返回一个 Promise。如果函数正常返回值,这个值会被包装成 resolved 状态的 Promise;如果抛出错误,则返回 rejected 状态的 Promise。
例如:
async function getValue() {return 42;
}
getValue().then(console.log); // 输出 42
await 只能在 async 函数内使用,用于等待 Promise 完成
await 会暂停当前 async 函数的执行,直到右侧的 Promise 被 resolve 或 reject。它不是阻塞线程,而是让出执行权,等结果就绪后继续运行后续代码。
立即学习“Java免费学习笔记(深入)”;
YXPHP6系统可以看做是一个模版平台,而且它又能独立工作. 而且YXPHP6系统也不需要数据库支持. 你可以开发自己的模板,也可以同步官方的模板后进行自己的二次开发,前提是您对YXPHP6要有一定的了解.YXPHP6不仅可以用作企业建站,甚至是blog,只要是您能想到的,YXPHP6几乎都可以胜任. 因为YXPHP6系统本身与模板之间可以说是独立运行的.也就是说,不管你做什么样的网站或者是应用,
注意点:
- 不能在顶层作用域或普通函数中直接用
await -
await后面不一定是 Promise:如果不是,会自动转为已 resolve 的 Promise - 如果 await 的 Promise 被 reject,会像 throw 错误一样中断执行,需要用 try/catch 捕获
对比传统 Promise 写法,async/await 更简洁清晰
比如顺序请求两个接口:
// Promise 链写法fetch('/api/user')
.then(res => res.json())
.then(user => fetch(`/api/posts?uid=${user.id}`))
.then(res => res.json())
.catch(err => console.error(err));
// async/await 写法
async function loadUserData() {
try {
const userRes = await fetch('/api/user');
const user = await userRes.json();
const postRes = await fetch(`/api/posts?uid=${user.id}`);
const posts = await postRes.json();
return { user, posts };
} catch (err) {
console.error('加载失败', err);
}
}
常见误区与注意事项
容易忽略的关键细节:
-
await是逐行等待的,多个独立请求不要串着 await,否则变慢;可用Promise.all()并发发起 - await 不等于“同步”,它只是语法上看起来像;底层仍是事件循环和微任务机制
- 不要滥用 async/await 包裹同步代码,增加不必要的 Promise 开销
基本上就这些。掌握 async/await 的核心,就是理解它如何简化 Promise 使用,同时不掩盖异步本质。









