Node.js采用单线程事件循环模型,通过异步I/O处理高并发。本文详细介绍回调函数、Promise和async/await三种异步编程模式,探讨如何避免回调地狱,提升代码可读性和执行效率。
# Node.js 异步编程完全指南
异步编程是 Node.js 的核心特性,掌握它才能真正发挥 Node.js 的威力。
## 为什么需要异步?
Node.js 采用单线程 + 事件循环模型,通过异步 I/O 让单个线程可以处理大量并发请求。传统的同步编程会阻塞线程,而异步编程则不会。
## 回调函数(Callback)
最基本的异步模式:
```javascript
const fs = require("fs");
fs.readFile("test.txt", "utf8", (err, data) => {
if (err) {
console.error("读取失败:", err);
return;
}
console.log("内容:", data);
});
```
## Promise
解决回调地狱的问题:
```javascript
const fs = require("fs/promises");
async function readFile() {
try {
const data = await fs.readFile("test.txt", "utf8");
console.log("内容:", data);
} catch (err) {
console.error("读取失败:", err);
}
}
readFile();
```
## async/await
最优雅的异步写法:
```javascript
async function fetchData() {
const response = await fetch("https://api.example.com/data");
const data = await response.json();
return data;
}
```
## 总结
1. 避免在回调中嵌套回调
2. 优先使用 async/await
3. 正确处理错误
4. 理解事件循环原理
掌握异步编程,才能写出高效的 Node.js 应用!