在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. Unity NGUI UILabel文字变色 及相关问题

    在同一个UILabel中可以有不同颜色的文字只需要添加BBCode标记[ff0000]Red Label[-],那么在这个标记之间的RedLabel 就会变成红色 注意: 1.文本最终显示的颜色=Co ...

  2. Ubuntu 14.04 没有system settings的解决方法

    在我的Dell Latitude 3330上, 新装的Ubuntu 14.04一切正常,就是没有system settings程序, 以下的命令能够解决: sudo apt-get install u ...

  3. UVA 10465 Homer Simpson(dp + 完全背包)

    Problem C: Homer Simpson Time Limit: 3 seconds Memory Limit: 32 MB Homer Simpson, a very smart guy, ...

  4. [RxJS] Filtering operator: filter

    This lesson introduces filter: an operator that allows us to let only certain events pass, while ign ...

  5. java格式处理工具类

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  6. css 权威指南笔记(三)结合css和XHTML

    link rel stylesheet alternate stylesheet(候选样式表) title type media all screen print ..... 内联样式

  7. 9.29noip模拟试题

    环上的游戏(cycle) 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这 ...

  8. logic:present 和 logic:empty的用法 (转)

    logic:empty和logic:notEmpty logic:empty标签判断脚本变量是否为null,是否是一个空的字符串(长度为0),是否是一个空的collection或map(调用isEmp ...

  9. CAEmitterLayer

    -(void)createFireworks{ CAEmitterLayer *fireworks = [CAEmitterLayer layer]; fireworks.emitterPositio ...

  10. 【转】 CoreGraphics QuartzCore CGContextTranslateCTM 用法

    原文:http://blog.csdn.net/sqc3375177/article/details/25708447 CoreGraphics.h 一些常用旋转常量 #define M_E 2.71 ...