在Node很多对象发出事件,例如net.Server每个同级连接到它,一个fs.readStream发出打开文件事件时,每次都发出一个事件。 它发出事件的所有对象都是events.EventEmitter的实例。

EventEmitter 类

正如我们已经看到在上一节,EventEmitter类在于事件的模块。它是通过通俗易懂的语法如下:

// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

EventEmitter实例对任何错误,它会发出一个“error”事件。当新的侦听器被添加,“newListener'事件被触发,当一个侦听器被删除,'removeListener”事件被触发。

EventEmitter提供多种性能如在发射。On属性用于绑定事件函数,发射用于触发一个事件。

方法

S.N. 方法 & 描述
1 addListener(event, listener)
添加一个监听器监听器数组指定事件的结束。没有进行检查,以查看是否侦听器已经添加。多次调用传递事件和监听器的相同组合,将导致在侦听器被添加多次。返回发射器,所以调用可以链接。
2 on(event, listener)
添加一个监听器监听器数组在未尾指定事件. 没有进行检查,以查看是否侦听器已经添加。多次调用传递事件和监听器的相同组合,将导致在侦听器被添加多次。返回发射器,所以调用可以链接。
3 once(event, listener)
增加一次监听事件。 监听器调用仅在下一次事件被触发,之后被删除。返回发射器,所以调用可以链接。
4 removeListener(event, listener)
从侦听器数组指定事件删除监听器。注意:改变数组索引侦听器后面监听器数组中。removeListener将从监听数组中删除至多侦听器一个实例。如果任何一个监听器已经被多次添加到侦听数组指定事件,然后removeListener必须多次删除每个实例。返回发射器,所以调用可以链接。
5 removeAllListeners([event])
删除所有监听器,或者那些指定的事件。这不是一个好主意,删除在其他地方添加代码,特别是当它在还没有创建(如套接字或文件流)发射器监听器。 返回发射器,所以调用可以链接。
6 setMaxListeners(n)
默认情况下EventEmitters将打印一个警告,如果超过10个监听器添加特定事件。这是一个有用的默认这有助于发现内存泄漏。显然,并非所有的发射器应限制在10个,此功能允许增加。设置为零无限制。
7 listeners(event)
返回监听器为指定事件的数组。
8 emit(event, [arg1], [arg2], [...])
为了与提供的参数执行每一个监听器。如果事件有监听器返回true,否则为false。

类方法

S.N. 方法 & 描述
1 listenerCount(emitter, event)
返回对于一个给定的事件监听器的数量。

事件

S.No. 事件 & 描述
1 newListener

  • event - 事件字符串名称

  • listener - 函数的事件处理函数

此事件发出的侦听器在任何时间添加。当该事件被触发,监听器可能还没有被添加到监听的数组,用于该事件。

2 removeListener

  • event - 字符串事件名称

  • listener - 函数的事件处理函数

此事件发出任何时当要删除一个侦听器。当该事件被触发,监听器可能还没有被从监听的阵列删除,而用于在事件中删除。

例子

创建一个名为main.js,使用以下Node.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.
 
本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程 
更多开发学习资料请访问www.javarecord.com

Node.js事件发射器的更多相关文章

  1. Node.js事件的正确使用方法

    前言 事件驱动的编程变得流行之前,在程序内部进行通信的标准方法非常简单:如果一个组件想要向另外一个发送消息,只是显式地调用了那个组件上的方法.但是在 react 中用的却是事件驱动而不是调用. 事件的 ...

  2. Node.js 事件

    Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, ...

  3. Node.js 事件循环(Event Loop)介绍

    Node.js 事件循环(Event Loop)介绍 JavaScript是一种单线程运行但又绝不会阻塞的语言,其实现非阻塞的关键是“事件循环”和“回调机制”.Node.js在JavaScript的基 ...

  4. Node.js事件循环

    Node JS是单线程应用程序,但它通过事件和回调概念,支持并发. 由于Node JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性.Node JS使用观察者模式.Node ...

  5. node.js零基础详细教程(4):node.js事件机制、node异步IO操作

    第四章 建议学习时间3小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  6. 6、Node.js 事件循环

    #########################################################################################Node.js 事件循 ...

  7. The Node.js Event Loop, Timers, and process.nextTick() Node.js事件循环,定时器和process.nextTick()

    个人翻译 原文:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ The Node.js Event Loop, Ti ...

  8. Node.js 事件循环

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发. Node.j ...

  9. Node.js 学习(五)Node.js 事件循环

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发. Node.j ...

随机推荐

  1. 【Android - 框架】之MVP模式的使用

    提起MVP架构模式,大家可能首先想到的是它的"前辈"MVC模式.MVC由Model.View.Controller组成,请求从Controller进入后进行业务判断,然后交给Mod ...

  2. maven tomcat1.7环境下构建javaweb 项目

    tomcat用户权限设置 在tomcat安装路径\conf目录下tomcat-users.xml添加: <role rolename="admin-gui"/> < ...

  3. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  4. 设置U盘为第一启动顺序

    本文转载:http://u.diannaodian.com/Article/1004.html 盘安装系统的首要步骤就是设置U盘为第一启动顺序.下面电脑店官网就来说说到底如何来设置U盘启动顺序吧.   ...

  5. web socket 心跳包的实现方案

    web socket 心跳包的实现方案05/30/2010 现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我 ...

  6. iOS-CGContextRef画各种图形例子

    iOS-CGContextRef画各种图形例子 绘制效果图 绘制代码 - (void)drawRect:(CGRect)rect { //一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你 ...

  7. 你需要知道的 Android 拍照适配方案

    近段时间,家里陪自己度过大学四年的电脑坏了,挑选好的新电脑配件终于在本周全部到货,自己动手完成组装.从AMD到i7的CPU,6G内存到14G内存,打开 AndroidStudio 的速度终于杠杆的上去 ...

  8. css考核点整理(一)-浮动的理解和清除浮动的几种方式

    浮动的理解和清除浮动的几种方式 clear语法:clear : none | left | right | both 取值:none : 默认值.允许两边都可以有浮动对象left : 不允许左边有浮动 ...

  9. warning:This application is modifying the autolayout engine from a background thread

    警告提示:This application is modifying the autolayout engine from a background thread, which can lead to ...

  10. SQL Server DBA工作内容详解

    在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色.DBA的工作目标就是确保Microsoft SQ ...