文字作品文章技术教程React
异步编程的本质
从 Callback 到 Promise 再到 async/await —— JavaScript 异步模型的演进。
2026/4/16约 2,800 字 · 阅读约 9 分钟2 次阅读
异步编程是 JavaScript 的灵魂,也是新手最容易困惑的地方。本文尝试从根本上讲清楚:异步到底是什么?
一、同步的限制
想象你去咖啡店点单。同步模型就是:你点单 → 咖啡师停下所有工作专心给你做 → 做完交给你 → 你走了,他才接待下一个人。
这在单人场景下没问题,但现实世界不是这样。
二、异步的核心
异步就是:你点单 → 咖啡师接单后开始做 → 但他可以同时接下一个人的单 → 每做完一杯叫一声 → 对应的人来取。
在 JavaScript 里,这个"叫一声"就是回调。
三、Callback 地狱
fs.readFile('a.txt', (err, a) => {
fs.readFile('b.txt', (err, b) => {
fs.readFile('c.txt', (err, c) => {
// ...
});
});
});
嵌套太深就成了"回调地狱",难以阅读和维护。
四、Promise 的改进
readFile('a.txt')
.then(a => readFile('b.txt'))
.then(b => readFile('c.txt'))
.then(c => console.log(c));
Promise 把嵌套改成了链式。但链式仍然不如同步代码直观。
五、async/await 的革命
async function main() {
const a = await readFile('a.txt');
const b = await readFile('b.txt');
const c = await readFile('c.txt');
console.log(c);
}
看起来像同步代码,但实际是异步执行。这才是现代 JavaScript 的正道。
六、本质
async/await 不是魔法,它只是 Promise 的语法糖。但这个糖让我们重新获得了"线性思考"的能力——这才是编程语言最重要的特性。
好的编程语言让人思考问题本身,而不是思考语言本身。