NodeJs的事件模块
在爬虫代码中有个上(“数据”)事件,为什么响应的res回有一个在方法呢,那这个在做什么事情呢,要回答这些问题,要从事件模块说起,在NodeJs中不存在浏览器中的冒泡,捕获这些行为的,所以NodeJs中实现的事件这个模块,里面的大多数模块都集成了这个模块,
所以事件是最重要的一个模块,它只对外暴露了一个对象,就是eventImit,作用有两个分别是事件的发射,和事件的监听,两个不同的执行环节本来是毫无联系的,但是有了事件模块的支持以后,这两个环节就能建立起联系,eventImit支持多个事件监听器,最大值是10个,
就是在某个事件添加10个事件监听器;
,
var EventEmitter =,需要.EventEmitter(“事件”) var life =, new EventEmitter ()//addEventListener 生命('求安慰”,函数(世卫组织){ console.log('给' +人+“放水”) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+“揉肩”) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+”做饭”) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+“洗衣服”) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+“........ 5”) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+“........ 6”) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+ ........ 7) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+ ........ 8) }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+ ' ........ 9 ') }) 生命('求安慰”,函数(世卫组织){ console.log('给' +人+ ........ 10) })//触发 life.emit('求安慰”、“汉子”)
运行结果如下:
如果绑定的事件多于10个呢,会怎样?
生命(“求安慰”,函数(世卫组织){ console.log(‘给’+人+ '你想累死我啊”) })
执行结果如下:
第11个监听器还是会执行的,但是会抛出了一个警告,那这个就是官方建议的,对于一个事件设置不要超过10个监听器,太多的话会导致内存的泄露,当然这个值是可以修改的,
那我们去修改一下事件所忍受的极限:
life.setMaxListeners (11)//添加在新对象之后,对之前
执行效果如下:
如果我对生活注册另外一个事件,会不会占用这个最大值吗?
代码如下:
生命(“求关爱”,函数(世卫组织){ console.log('给' +人+“买衣服”) }) 生命('求关爱”功能(世卫组织){ console.log('给' +人+“交工资”) })
运行结果如下:
从运行结果发现:如果没有发出求关爱事件是不会触发监听函数的,
不是为所有事件统一分配的,只是为求安慰事件分配11个额度。
查看一个事件是否被监听过?
根据监听事件的返回值是个布尔类型
var flag1 =, life.emit(“求安慰”,“汉子”) var flag2 =, life.emit('求关爱”,“妹子”) var flag3 =, life.emit('求什么”,“汉子和汉子”) console.log (flag1); console.log (flag2); console.log (flag3);
运行结果如下:
如何移除一个事件呢?
错误的写法:写在事件触发发出之前
life.removeListener(“求安慰”,函数(){ console.log('给' +人+“放水”) })
运行结果如下: