spring的技术笔记
学习Node基础第 3 / 23 篇2 分钟阅读

异步与事件循环

异步与事件循环

这节要解决什么

明白:为什么 Node 适合「等数据库 / 等网络」这类活,以及 async/await 在 Node 里怎么用。

先用大白话

做菜时:

  • 同步:站在锅边死等水开,什么都干不了
  • 异步:水开了再叫你,你中间可以切菜

Node 处理大量请求时,不能每个请求都「死等」文件或数据库,否则一个人卡住全员排队。
所以读写文件、发 HTTP、查库,几乎都是异步的。

你已经会 Promise / async-await —— 在 Node 里用法一样。
事件循环可以先记一句:

Node 先尽快跑完同步代码,再在合适的时机处理「已经完成的异步回调 / Promise」。

暂时不必死记 nextTick、微任务队列细节;会写 async/await + try/catch 就够做业务。

对着项目看

在 01-node-cli-notes 里,读写文件用的是 fs/promises(返回 Promise 的版本):

import { readFile, writeFile } from 'node:fs/promises'

比老的「回调地狱」好读得多。出错用:

try {
  await writeFile(...)
} catch (err) {
  console.error('失败了', err.message)
}

和前端的对比

前端Node
等接口:await fetch等文件/数据库:await readFile / Prisma
卡住页面会卡 UI卡住事件循环会让整个服务变慢
别在渲染里干重活别在请求处理里死循环/同步巨量计算

验收清单

  • 能说出「为什么读写文件常用异步」
  • 会用 async/await + try/catch 包一层 I/O
  • 不要求背事件循环细节,但知道「别用同步死等挡着所有请求」

下一节 → 03-fs-path-环境变量.md