Node.js-事件模块(events)之监听方式
2017-02-09 20:54
651 查看
事件模块
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。步骤:
引入系统提供的事件模块
实例化事件对象
注册事件
触发事件
方法:
引入 events模块
var events = require('events');
实例化事件对象
var myEmitter = new events.EventEmitter();
注册事件
myEmitter.on('someEvent',function (a,b,c) { console.log(a + b); console.log(c); });
触发事件
setTimeout(function () { myEmitter.emit('someEvent',5,10,"触发事件,在注册事件的回掉函数中接受参数") },2000);
首先引入系统提供的events模块,然后实例化出对象.
注册事件on参数:
emitter.on(event, function)event:事件名称,为一个字符串,function:一个回掉函数.
myEmitter.emit:触发事件
myEmitter.emit('事件名称',a,b,c)传参.
监听方式:
一. 监听一次:once:once:只监听执行一次,与on不同,on可以不停止的情况下一直处于监听状态
如:
//引入系统提供的事件模块 var events = require('events'); //实例化事件对象 var myEmitter = new events.EventEmitter(); var add = 0; var a = 0,b = 0; //注册事件 myEmitter.once('someEvent',function (a,b) { add = a + b; console.log(add); }); setInterval(function () { myEmitter.emit('someEvent',5,5); },1000);
以上代码如果使用on监听的情况下,会每1s执行一次
console.log(add),使用once后,监听只执行一次,便不再执行.
二. 移除监听:myEmitter.removeListener:
移除监听器,语法为:
myEmitter.removeListener(event,function);
如:
//引入系统提供的事件模块 var events = require('events'); //实例化事件对象 var myEmitter = new events.EventEmitter(); var add = 0; var a = 0,b = 0; var Fnc = function (a,b) { add = a + b; console.log(add); }; //注册事件 myEmitter.on('someEvent',Fnc); setInterval(function () { myEmitter.emit('someEvent',5,5); },1000); setTimeout(function () { myEmitter.removeListener('someEvent',Fnc); },5000);
以上代码执行为:每1s执行一次Fnc函数,如果没有
setTimeout(function () { myEmitter.removeListener('someEvent',Fnc); },5000);的情况下会一直执行,加上此代码,延迟5s执行移除监听事件,5s后不再监听.
三. 移除所有监听:myEmitter.removeAllListeners
移除所有监听器.
语法为:
myEmitter.removeAllListeners([event]);
event事件类型,支持多个,如上面代码中的
'someEvent'.
如()为空,为移除所有的监听
四. 设置事件绑定个数: myEmitter.setMaxLisstener(n)
emitter.setMaxLisstener(n) 可以设置同一事件的监听器最大绑定数,默认情况下,超过10个就好警告提示,这能帮我们快速找到内存泄露的地方。显然,不是所有的事件触发器都限制在10个监听器,通过这个方法可以设置,如果设置为0就是无限制。
五. 查看事件绑定个数:myEmitter.listenerCount(emitter,event)**
// 查看server绑定的'request'事件的监听器个数 var num = events.EventEmitter.listenerCount(myEmitter, 'someEvent'); console.log(num);
相关文章推荐
- Node.js:events事件模块
- node.js学习(十五、Events事件模块)
- Node.Js events模块(二)-EventEmitter自定义操作事件
- node.js学习之事件模块Events的使用示例
- 详解Node.js:events事件模块
- Node.js的模块载入方式与机制
- Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)
- 【Node.js】mongoose教程02--开启、关闭数据库,监听数据库事件
- Node.js文档关键模块: Timer, Buffer, Events, Stream, File System
- Node.js的模块载入方式与机制
- 解析Node.js基于模块和包的代码部署方式
- Node.js Net 模块的所有事件和方法&&net.Socket
- Node.js的事件监听函数代码
- 跟我学Node.js(四)---Node.js的模块载入方式与机制
- Node.js自定义对象事件监听与发射
- js 事件模型中不同浏览器的监听和解除监听方式参考
- 跟我学Nodejs(二)--- Node.js事件模块
- Node.js中HTTP模块与事件模块详解
- Node.js的模块载入方式与机制
- Node.js Events模块