node . js(十)——NodeJs事件

  

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('求安慰”、“汉子”)

运行结果如下:

 node . js(十)——NodeJs事件

如果绑定的事件多于10个呢,会怎样?

生命(“求安慰”,函数(世卫组织){   console.log(‘给’+人+ '你想累死我啊”)   })

执行结果如下:

 node . js(十)——NodeJs事件

第11个监听器还是会执行的,但是会抛出了一个警告,那这个就是官方建议的,对于一个事件设置不要超过10个监听器,太多的话会导致内存的泄露,当然这个值是可以修改的,

那我们去修改一下事件所忍受的极限:

life.setMaxListeners (11)//添加在新对象之后,对之前

执行效果如下:

 node . js(十)——NodeJs事件

如果我对生活注册另外一个事件,会不会占用这个最大值吗?

代码如下:

生命(“求关爱”,函数(世卫组织){   console.log('给' +人+“买衣服”)   })   生命('求关爱”功能(世卫组织){   console.log('给' +人+“交工资”)   })

运行结果如下:

 node . js(十)——NodeJs事件

从运行结果发现:如果没有发出求关爱事件是不会触发监听函数的,

不是为所有事件统一分配的,只是为求安慰事件分配11个额度。


查看一个事件是否被监听过?

根据监听事件的返回值是个布尔类型

var  flag1 =, life.emit(“求安慰”,“汉子”)   var  flag2 =, life.emit('求关爱”,“妹子”)   var  flag3 =, life.emit('求什么”,“汉子和汉子”)      console.log (flag1);   console.log (flag2);   console.log (flag3);

运行结果如下:

 node . js(十)——NodeJs事件


如何移除一个事件呢?

错误的写法:写在事件触发发出之前

life.removeListener(“求安慰”,函数(){   console.log('给' +人+“放水”)   })

运行结果如下:

 node . js(十)——NodeJs事件

node . js(十)——NodeJs事件