Module 02 · Asynchronous I/O with callback programming异步 I/O 与回调编程
Asynchronous I/O with Callback Programming异步 I/O 与回调编程概述
🎵 背景音乐开始
欢迎观看《异步 I/O 与回调编程》课程!完成本视频后,您将能够:
- 解释异步回调函数的概念
- 处理服务器资源的 HTTP 方法调用
异步 I/O 的概念
网络操作的异步特性
- 网络操作通常是异步的,例如:从 Web 服务调用的响应可能不会立即返回。
- 如果应用程序阻塞等待网络操作完成,服务器将浪费处理时间。
Node.js 的非阻塞机制
- 所有网络操作都是非阻塞的:每个操作都会立即返回一个结果,而无需等待完成。
- 当网络操作完成时,Node.js 会调用您定义的回调函数来处理结果。
异步流程示例
以下是 Node.js 处理 HTTP 请求的流程图:

- 发起 HTTP 请求:
- 调用
HTTP.request函数向远程 Web 服务器发送请求。 - Node.js 框架立即返回结果:此结果仅表示请求已成功发送,而不包含响应消息。
- 等待响应:
- 当远程服务器返回 HTTP 响应消息时,Node.js 框架会调用定义在
HTTP.request函数中的回调函数。
- 回调处理响应:
- 回调函数处理响应消息,例如解析响应体或打印日志。
复杂场景:自定义模块中的 HTTP 请求
- 应用程序调用自定义模块中的导出函数。
- 模块通过
HTTP.request向远程服务器发送请求,并立即返回结果。 - 应用程序在等待响应的同时继续处理其他操作。
- 远程服务器返回响应时,Node.js 框架调用模块内定义的回调函数。

HTTP 请求的实现代码
以下是一个使用 HTTP.request 发送请求并处理响应的示例:

步骤 1:定义请求选项
const options = {
hostname: 'api.weather.gov',
path: '/stations/KSFO/observations/latest',
method: 'GET'
};
- hostname:远程服务器的主机名。
- path:要操作的 URL 资源路径。
- method:请求方法(如
GET、POST等)。
步骤 2:发送请求
const http = require('http');
const req = http.request(options, (res) => {
let data = '';
// 监听 'data' 事件,接收数据块
res.on('data', (chunk) => {
data += chunk;
});
// 监听 'end' 事件,处理完成后的操作
res.on('end', () => {
console.log(data);
});
});
// 监听 'error' 事件,处理错误
req.on('error', (err) => {
console.error(`Request error: ${err.message}`);
});
// 结束请求
req.end();
HTTP 请求的参数与方法
HTTP 请求的参数
| 参数 | 描述 |
|---|---|
| hostname | 远程服务器的主机名,例如 api.weather.gov |
| path | URL 的资源路径,例如 /stations/KSFO/... |
| protocol | 协议(http 或 https) |
| headers | HTTP 请求头 |
重要方法
| 方法 | 描述 |
|---|---|
object.on() |
监听事件(例如 data、end、error、close)。 |
clientRequest.end() |
结束请求并发送数据到服务器。 |
事件与回调函数


| 事件类型 | 触发条件 | 描述 |
|---|---|---|
data |
数据块到达时触发 | 处理接收到的数据块 |
end |
响应完成时触发 | 处理最终的完整响应 |
error |
请求失败时触发 | 捕获并处理错误 |
close |
连接关闭时触发 | 清理资源 |
回调函数的作用
request.on('data'):当收到部分数据时调用,用于累积数据块。request.on('end'):当接收数据完成时调用,用于处理完整数据。- 错误处理:
- 如果发生错误,
error事件会被触发。 - 调用
req.on('error')捕获并记录错误信息。
- 如果发生错误,





总结
- 异步 I/O 的优势:
- 非阻塞:网络操作立即返回结果,应用程序不会因等待而浪费处理时间。
- 回调函数的使用:
- Node.js 在接收到 HTTP 响应消息后调用回调函数,处理响应数据。
- 事件监听:
- 通过
object.on()监听data、end、error等事件,处理响应的不同阶段。
🎉 恭喜您掌握了异步 I/O 与回调编程的核心概念和基本实现方法! 🚀