- Node.js教程
- Node.js - 教程
- Node.js - 简介
- Node.js - 环境设置
- Node.js - 首次申请
- Node.js - REPL 终端
- Node.js - 命令行选项
- Node.js - 包管理器 (NPM)
- Node.js - 回调概念
- Node.js - 上传文件
- Node.js - 发送电子邮件
- Node.js - 活动
- Node.js - 事件循环
- Node.js - 事件发射器
- Node.js - 调试器
- Node.js - 全局对象
- Node.js - 控制台
- Node.js - 流程
- Node.js - 扩展应用程序
- Node.js - 包装
- Node.js - Express 框架
- Node.js - RESTful API
- Node.js - 缓冲器
- Node.js - Streams
- Node.js - 文件系统
- Node.js MySQL
- Node.js - MySQL 快速入门
- Node.js - MySQL创建数据库
- Node.js - MySQL创建表
- Node.js - MySQL Insert Into
- Node.js - MySQL Select From
- Node.js - MySQL Where 子句
- Node.js - MySQL Order By
- Node.js - MySQL Delete
- Node.js - MySQL Update
- Node.js - MySQL Join
- Node.js MongoDB
- Node.js - MongoDB 快速入门
- Node.js - MongoDB 创建数据库
- Node.js - MongoDB 创建集合
- Node.js - MongoDB Insert
- Node.js - MongoDB Find
- Node.js - MongoDB 查询
- Node.js - MongoDB 排序
- Node.js - MongoDB Delete
- Node.js - MongoDB Update
- Node.js - MongoDB Limit
- Node.js - MongoDB Join
- Node.js模块
- Node.js - 模块
- Node.js - 内置模块
- Node.js - utility 模块
- Node.js - Web 模块
Node.js - 事件发射器
Node.js API 基于事件驱动的架构。它包括 events 模块,该模块提供创建和处理自定义事件的功能。事件模块包含 EventEmitter 类。EventEmitter 对象发出命名事件。此类事件调用侦听器函数。事件发射器在Node.js生态系统中起着非常重要的作用。节点中的许多对象都会发出事件,例如,网络。每次对等方连接到服务器对象或关闭连接时,服务器对象都会发出一个事件。fs.readStream 对象在打开、关闭文件、执行读/写操作时发出事件。所有发出事件的对象都是事件的实例。EventEmitter。
由于 EvenEmitter 类是在 events 模块中定义的,因此我们必须在代码中包含 require 语句。
var events = require('events');
要发出事件,我们应该声明一个 EventEmitter 类的对象。
var eventEmitter = new events.EventEmitter();
当 EventEmitter 实例遇到任何错误时,它会发出“error”事件。添加新侦听器时,将触发“newListener”事件,删除侦听器时,将触发“removeListener”事件。
活动 | 描述 |
---|---|
newListener(event, listener) |
event − String: 事件名称 listener − Function: 事件处理函数 每当添加侦听器时,都会发出此事件。触发此事件时,侦听器可能尚未添加到该事件的侦听器数组中。 |
removeListener(event, listener) |
event − String :事件名称 listener − Function: 事件处理函数 每当有人删除侦听器时,都会发出此事件。触发此事件时,侦听器可能尚未从事件的侦听器数组中删除。 |
以下实例方法在 EventEmitter 类中定义:
活动 | 描述 |
---|---|
addListener(event, listener) |
在指定事件的侦听器数组的末尾添加一个侦听器。返回发射器,因此可以链接调用。 |
on(event, listener) |
在指定事件的侦听器数组的末尾添加一个侦听器。与 addListener 相同。 |
once(event, listener) |
向事件添加一次性侦听器。此侦听器仅在下次触发事件时调用,之后将删除该事件 |
removeListener(event, listener) |
从指定事件的侦听器数组中删除侦听器。如果已将任何单个侦听器多次添加到指定事件的侦听器数组中,则必须多次调用 removeListener 以删除每个实例。 |
removeAllListeners([event]) |
删除所有侦听器或指定事件的侦听器。删除添加到代码中其他地方的侦听器不是一个好主意,尤其是当它位于您未创建的发射器(例如套接字或文件流)上时。 |
setMaxListeners(n) |
默认情况下,如果为特定事件添加了 10 个以上的侦听器,EventEmitters 将打印警告。设置为零表示无限制。 |
listeners(event) |
返回指定事件的侦听器数组。 |
emit(event, [arg1], [arg2], [...]) |
使用提供的参数按顺序执行每个侦听器。如果事件有侦听器,则返回 true,否则返回 false。 |
off(event, listener) |
removeListener 的别名 |
例
让我们定义两个侦听器函数,如下所示 -
var events = require('events');
var eventEmitter = new events.EventEmitter();
// 侦听器 #1
var listner1 = function listner1() {
console.log('listner1 executed.');
}
// 侦听器 #2
var listner2 = function listner2() {
console.log('listner2 executed.');
}
让我们将这些侦听器绑定到连接事件。第一个函数 listener1 是使用 addListener() 方法注册的,而我们使用 on() 方法绑定 listener2。
// 将连接事件与 listner1 函数绑定
eventEmitter.addListener('connection', listner1);
// 将连接事件与 listner2 函数绑定
eventEmitter.on('connection', listner2);
// 触发连接事件
eventEmitter.emit('connection');
当使用 emit() 方法触发连接事件时,控制台会在侦听器中显示日志消息,如上所述
listner2 executed.
让我们从连接事件中删除 listener2 回调,并再次触发连接事件。
// 移除listner1函数的绑定
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");
// 触发连接事件
eventEmitter.emit('connection');
控制台现在显示以下日志 -
listner2 executed.
Listner1 will not listen now.
listner2 executed.
EventEmitter 类还有一个 listCount() 方法。它是一种类方法,返回给定事件的侦听器数量。
const events = require('events');
const myEmitter = new events.EventEmitter();
// 侦听器 #1
var listner1 = function listner1() {
console.log('listner1 executed.');
}
// 侦听器 #2
var listner2 = function listner2() {
console.log('listner2 executed.');
}
// 将连接事件与listner1函数绑定
myEmitter.addListener('connection', listner1);
// 将连接事件与listner2函数绑定
myEmitter.on('connection', listner2);
// 触发连接事件
myEmitter.emit('connection');
console.log("Number of Listeners:" + myEmitter.listenerCount('connection'));
输出
listner2 executed.
Number of Listeners:2