LvG
文字作品文章技术教程React

异步编程的本质

从 Callback 到 Promise 再到 async/await —— JavaScript 异步模型的演进。

2026/4/162,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 的语法糖。但这个糖让我们重新获得了"线性思考"的能力——这才是编程语言最重要的特性。

好的编程语言让人思考问题本身,而不是思考语言本身。