创建文件events.js,依次写入下列代码:

事件模块引入与实例化监听器

// 引入事件模块
var e = require('events');
// 实例化事件监听
var emitter = new e.EventEmitter();

方法

一、on(event, callback) 注册监听事件

emitter.on('test', function (arg) {
console.log('test1触发,传入参数为:' + arg);
}); emitter.on('test', function (arg) {
console.log('test2触发,传入参数为:' + arg);
}); emitter.on('test', function (arg) {
console.log('test3触发,传入参数为:' + arg);
}); // 同一个监听事件可注册多个响应

二、addListener(event, callback)  添加一个监听器到监听器数组的尾部

emitter.addListener('test', function (arg) {
console.log('新增test4触发,传入参数为:' + arg);
}) // 将自动添加为 “test” 监听事件的最后一个

三、emit(event,[arg1],[arg2],[arg3]...)  触发监听事件

emitter.emit('test', 'admin');

命令行运行node events.js,输出如图:

(相同命名的监听事件将按顺序依次触发执行)

四、once(event, callback)  注册单次监听器

emitter.once('onceEvent', function (count) {
console.log('单次监听器触发,二次将不存在' + count);
})

emit(event) 触发监听事件

emitter.emit('onceEvent', 1); // 执行
emitter.emit('onceEvent', 2); // 不再执行

命令行运行 ↑(上建),输出如图:

(once注册的监听事件仅执行一次后,将被自动移除,二次执行将不会再触发事件)

五、removeListener(event,callback) 移除指定监听事件

// 为test再次创建一个监听事件
function callback(arg) {
console.log('test5触发,传入参数为:' + arg + '\n');
}
emitter.on('test', callback); // 再次触发test
emitter.emit('test', 'admin'); // 移除刚刚为创建的test监听事件
emitter.removeListener('test', callback); // 再次触发test
emitter.emit('test', 'admin');

命令行运行 ↑(上建),输出如图:

六、listeners(event) 返回指定事件的监听器数组

var listenArry = emitter.listeners('test');
console.log(listenArry.length);

将输出:

七、【类方法】listenerCount(emitter, event); 返回指定事件的监听器数量

var listenArry = emitter.listeners('test');
var count = e.listenerCount(emitter, 'test');
console.log(listenArry.length, count);

将输出:

八、removeAllListeners()移除所有监听器或 removeAllListeners(event) 移除指定事件的所有监听器

emitter.removeAllListeners('test'); // 移除test上的所有监听器
emitter.removeAllListeners(); // 移除所有监听器

九、setMaxListeners(n) 更改监听器默认限制(监听器默认上限为10个,超过后会输出警告)

例如在 “二” 代码前添加:

emitter.setMaxListeners(3);

将输出警告:

(该函数一般用于提高默认监听器限制,此为举例,不提倡降低)

事件

一、('newListener',listener ) 该事件在添加新监听器时被触发

var i = 0;
emitter.on('newListener', function () {
i++;
console.log('第' + i + '次添加监听器成功');
})

输出结果为:

二、('removeListener',listener ) 该事件在监听器被移除时触发

var remove = 0;
emitter.on('removeListener', function () {
remove++;
console.log('第' + remove + '次移除监听器成功');
})

输出结果为:

(这是在刚才的once注册事件前添加的代码,此结果也验证了,once是在执行添加成功后,立刻将该监听器移除了,因此该监听器只会执行一次)

error 事件

error触发:遇到异常时将自动触发

error事件处理:EventEmitter 规定如果没有响应的监听器,Node.js 会把它当作异常,退出程序并输出错误信息

因此建议为会触发 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃

node 事件监听器的更多相关文章

  1. node事件循环

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

  2. passive 的事件监听器

    很久以前,addEventListener() 的参数约定是这样的: addEventListener(type, listener, useCapture) 后来,最后一个参数,也就是控制监听器是在 ...

  3. js事件监听器用法实例详解

    这篇文章主要介绍了js事件监听器用法,以实例形式较为详细的分析了javascript事件监听器使用注意事项与相关技巧,需要的朋友可以参考下本文实例讲述了js事件监听器用法.分享给大家供大家参考.具体分 ...

  4. Java基础之处理事件——实现低级事件监听器(Sketcher 2 implementing a low-level listener)

    控制台程序. 定义事件监听器的类必须实现监听器接口.所有的事件监听器接口都扩展了java.util.EventListener接口.这个接口没有声明任何方法,仅仅用于表示监听器对象.使用EventLi ...

  5. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. Android编程: 界面组成、事件监听器

    学习知识:界面组成.事件监听器 ====界面组成==== 1.用户界面的基本组件叫做View,都是继承android.view.View类,Android里面预定义很多基本的界面组件,比如 Butto ...

  7. Hibernate拦截器(Interceptor)与事件监听器(Listener)

    拦截器(Intercept):与Struts2的拦截器机制基本一样,都是一个操作穿过一层层拦截器,每穿过一个拦截器就会触发相应拦截器的事件做预处理或善后处理. 监听器(Listener):其实功能与拦 ...

  8. Android事件监听器Event Listener

    在 Android 中,我们可以通过事件处理使UI与用户互动(UI Events). UI的用户事件处理,即View处理用户的操作,在应用程序中几乎不可避免.View是重要的类,它是与用户互动的前线: ...

  9. Servlet事件监听器

    监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 面试题:请描述一下java事件监听机 ...

随机推荐

  1. [转]C#如何判断操作系统位数是32位还是64位

    方法一: 对于C#来说,调用WMI是一种简单易行的方式.我们可以用Win32_Processor类里面的AddressWidth属性来表示系统的位宽.AddressWidth的值受CPU和操作系统的双 ...

  2. linux kill 关闭进程命令

    杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常都能达到目的 ...

  3. sensor dma alloc failed问题

    打印信息 [CAPTURE][printCapCapbility:93]:D/ driver:sunxi-vfe [CAPTURE][printCapCapbility:94]:D/ card:sun ...

  4. android圆形图像

    在网上找了一下,最简单的是利用canvas的setXfermode,来控制图片重合部分的显示策略. 图片混合时,先画的是dst,后画的是src,各种混合的方式如下,其中圆形是dst,正方形是src: ...

  5. Adroid—— DVM

     Android DVM   Android 运行环境主要指的虚拟机技术——Dalvik.Android中的所有Java程序都是运行在Dalvik VM上的.Android上的每个程序都有自己的线程, ...

  6. RabbitMQ之发布订阅【译】

    在上一节中我们创建了一个工作队列,最好的情况是工作队列能够把任务恰到好处的分配给每一个worker.这一节中我们将做一些完全不同的事情--将消息传递给每一个消费者,这种模式被称为发布/订阅. 为了说明 ...

  7. JDK1.8与spring3.x的不兼容

    今天运气很好,两次遇到了这个兼容性问题,spring3.x不支持 java 1.8 byte code format!! 九月 10, 2017 7:17:18 上午 org.apache.catal ...

  8. asp.net 省市联级代码

    3种代码 asp.net js 和数据库的 都测试通过了..例子在http://download.csdn.net/download/jine515073/6878157

  9. java.util下有一个Comparator(比较器)

    java.util下有一个Comparator(比较器) 它拥有compare(),用来比较两个方法. 要生成比较器,则用Sort中Sort(List,List(Compate)) 第二种方法更灵活, ...

  10. thinkPHP 上传文件的中文乱码

    最新版本~用了里面的上传文件类,发现在保存文件原本名称的时候当有中文名的时候保存文件会显示乱码,看了下源代码发现在Tp上传驱动那里有点问题. // if (!move_uploaded_file($f ...