- Node.js 教程
- Node.js - 主页
- Node.js - 简介
- Node.js - 环境设置
- Node.js - 第一个应用程序
- Node.js - REPL 终端
- Node.js - 包管理器 (NPM)
- Node.js - 回调概念
- Node.js - 事件循环
- Node.js - 事件发射器
- Node.js - 缓冲区
- Node.js - 流
- Node.js - 文件系统
- Node.js - 全局对象
- Node.js - 实用模块
- Node.js - Web 模块
- Node.js - Express 框架
- Node.js - RESTFul API
- Node.js - 扩展应用程序
- Node.js - 打包
- Node.js - 内置模块
- Node.js 有用资源
- Node.js - 快速指南
- Node.js - 有用的资源
- Node.js - 讨论
Node.js - 事件发射器
Node 中的许多对象都会发出事件,例如,每次对等点连接到 net.Server 时,net.Server 都会发出一个事件,fs.readStream 在打开文件时会发出一个事件。所有发出事件的对象都是 events.EventEmitter 的实例。
事件发射器类
正如我们在上一节中看到的,EventEmitter 类位于事件模块中。它可以通过以下代码访问 -
// Import events module var events = require('events'); // Create an eventEmitter object var eventEmitter = new events.EventEmitter();
当 EventEmitter 实例遇到任何错误时,它会发出“错误”事件。添加新侦听器时,会触发“newListener”事件;删除侦听器时,会触发“removeListener”事件。
EventEmitter 提供了多个属性,例如on和emit。on属性用于将函数与事件绑定,emit用于触发事件。
方法
先生。 | 方法及说明 |
---|---|
1 |
添加监听器(事件,监听器) 在指定事件的侦听器数组末尾添加侦听器。不会检查侦听器是否已添加。传递相同的事件和侦听器组合的多个调用将导致侦听器被多次添加。返回发射器,因此可以链接调用。 |
2 |
on(事件,侦听器) 在指定事件的侦听器数组末尾添加侦听器。不会检查侦听器是否已添加。传递相同的事件和侦听器组合的多个调用将导致侦听器被多次添加。返回发射器,因此可以链接调用。 |
3 | 一次(事件,侦听器) 向事件添加一次性侦听器。仅在下次触发事件时才调用此侦听器,之后将其删除。返回发射器,因此可以链接调用。 |
4 |
移除监听器(事件,监听器) 从指定事件的侦听器数组中删除侦听器。注意 -它更改侦听器后面的侦听器数组中的数组索引。removeListener 最多将从侦听器数组中删除一个侦听器实例。如果任何单个侦听器已多次添加到指定事件的侦听器数组中,则必须多次调用removeListener 才能删除每个实例。返回发射器,因此可以链接调用。 |
5 |
移除所有监听器([事件]) 删除所有侦听器或指定事件的侦听器。删除在代码中其他位置添加的侦听器并不是一个好主意,特别是当它位于您未创建的发射器上时(例如套接字或文件流)。返回发射器,因此可以链接调用。 |
6 |
设置最大监听器(n) 默认情况下,如果为特定事件添加了超过 10 个侦听器,EventEmitters 将打印警告。这是一个有用的默认值,有助于查找内存泄漏。显然,并非所有发射器都应限制为 10 个。此功能允许增加发射器数量。设置为零表示无限制。 |
7 |
听众(事件) 返回指定事件的侦听器数组。 |
8 |
发出(事件,[arg1],[arg2],[...]) 使用提供的参数按顺序执行每个侦听器。如果事件有侦听器,则返回 true,否则返回 false。 |
类方法
先生。 | 方法及说明 |
---|---|
1 |
监听器计数(发射器,事件) 返回给定事件的侦听器数量。 |
活动
先生。 | 活动及描述 |
---|---|
1 | 新监听器
每当添加侦听器时都会发出此事件。当触发此事件时,侦听器可能尚未添加到该事件的侦听器数组中。 |
2 |
移除监听器
每当有人删除侦听器时都会发出此事件。当触发此事件时,侦听器可能尚未从该事件的侦听器数组中删除。 |
例子
使用以下 Node.js 代码创建一个名为 main.js 的 js 文件 -
var events = require('events'); var eventEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 executed.'); } // Bind the connection event with the listner1 function eventEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function eventEmitter.on('connection', listner2); var eventListeners = require('events').EventEmitter.listenerCount (eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); // Fire the connection event eventEmitter.emit('connection'); // Remove the binding of listner1 function eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); // Fire the connection event eventEmitter.emit('connection'); eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); console.log("Program Ended.");
现在运行 main.js 来查看结果 -
$ node main.js
验证输出。
2 Listner(s) listening to connection event listner1 executed. listner2 executed. Listner1 will not listen now. listner2 executed. 1 Listner(s) listening to connection event Program Ended.