Nodejs细节3:使用EventEmitter();事件模块
Nodejs细节3:使用EventEmitter();事件模块
当要定时调用某个函数可以使用EventEmitter,他会去注册你的事件到系统消息队列中去。 var emitter = new events.EventEmitter();//事件发射器 //创建http监听事件 emitter.on(“RequestEvent”, function (arg1, arg2) {
get(); //重复调用的函数
});
//请求服务器信息 function request() {
emitter.emit("RequestEvent", null, null);
}
Nodejs细节3:使用EventEmitter();事件模块
在Node.js中,EventEmitter
是一个非常有用的内置模块,它提供了一种观察者模式来处理事件。通过 EventEmitter
,我们可以注册事件并监听这些事件的发生,从而在特定事件触发时执行相应的回调函数。
示例代码
首先,我们需要引入 events
模块,并创建一个 EventEmitter
实例:
const EventEmitter = require('events');
const emitter = new EventEmitter();
接下来,我们可以定义一些事件处理器(即回调函数),并通过 on
方法将它们绑定到特定的事件上:
// 定义一个事件处理器
function handleRequest(arg1, arg2) {
console.log(`Handling request with arguments: ${arg1}, ${arg2}`);
}
// 将事件处理器绑定到 "request" 事件
emitter.on('request', handleRequest);
然后,我们可以在需要的时候触发该事件,并传递相应的参数:
// 触发 "request" 事件
function triggerRequest() {
const arg1 = 'arg1';
const arg2 = 'arg2';
emitter.emit('request', arg1, arg2);
}
// 调用触发函数
triggerRequest();
解释
-
创建
EventEmitter
实例:首先,我们通过require('events')
引入events
模块,并创建一个EventEmitter
的实例emitter
。 -
绑定事件处理器:使用
emitter.on(event, listener)
方法将一个回调函数绑定到特定的事件上。在这个例子中,我们将handleRequest
函数绑定到名为"request"
的事件上。 -
触发事件:使用
emitter.emit(event, [arg1], [arg2], [...])
方法触发一个事件,并可选地传递一些参数给绑定的回调函数。在这个例子中,我们通过emitter.emit('request', arg1, arg2)
来触发"request"
事件,并传递两个参数。
使用场景
EventEmitter
可以用于多种场景,例如:
- 在HTTP服务器中监听客户端请求;
- 在文件系统操作中监听文件读写完成事件;
- 在网络通信中监听数据接收事件等。
通过这种方式,你可以更灵活地管理异步事件,提高代码的可维护性和扩展性。
一直不明白 EventEmitter
模块能用在什么地方…
用在你写的API里想提供一些回调函数给别人,但又不想在你的代码里显示地去处理别人的回调,就在需要调用别人回调函数的时候发个事件信号, 由调用者自己决定要不要注册你的事件,我的理解是这样的
压根不是把你的事件注册到系统消息队列里, 跟系统消息队列没一点关系, 你看过emitter的源码吗?
Node.js 细节3:使用EventEmitter()事件模块
EventEmitter
是 Node.js 中一个核心的模块,用于处理事件驱动编程。通过 EventEmitter
,你可以定义事件,并在特定事件触发时执行相应的回调函数。
示例代码:
const EventEmitter = require('events');
// 创建一个 EventEmitter 实例
const emitter = new EventEmitter();
// 定义一个事件处理函数
function get() {
console.log("正在获取数据...");
}
// 监听 "data" 事件,并注册一个回调函数
emitter.on('data', get);
// 模拟触发 "data" 事件
setTimeout(() => {
emitter.emit('data');
}, 2000);
// 输出:
// 正在获取数据...
解释
-
创建 EventEmitte 实例:
const emitter = new EventEmitter();
这里我们创建了一个
EventEmitter
的实例emitter
。 -
定义事件处理函数:
function get() { console.log("正在获取数据..."); }
这个函数将在事件被触发时执行。
-
监听事件:
emitter.on('data', get);
使用
on
方法注册一个事件处理函数,该函数会在data
事件触发时执行。 -
触发事件:
setTimeout(() => { emitter.emit('data'); }, 2000);
使用
emit
方法手动触发data
事件,此时所有监听该事件的回调函数将被执行。
通过这种方式,我们可以实现一些定时任务或条件触发的任务。例如,你可以使用 setInterval
或其他逻辑来定时触发事件,从而执行某些功能。