• Nodejs事件监听模块


    nodejs里面是不存在浏览器里面都冒泡,捕获这些行为的,所以Nodejs实现了events这个模块,里面大多数的模块都集成了这个模块,所以events是node模块里面最重要都一个模块,他对外只暴露一个对象,就是EventEmitter,EventEmitter作用只有两个,分别是,事件都发送和事件都监听。emit支持多个事件监听,最大值是10个,也就是可以为某个事件添加10个监听函数,来做10件事情,比如
    var EventEmitter = require('events').EventEmitter;
    var life = new EventEmitter();
    
    //这里不用on,也可以用addEventListener
    life.on('doSth', function(who){
      console.log('给 ' + who + ' 倒水');
    })
    
    life.emit('doSth','Sunny');

    这个on最多可以添加10个,添加11个后,会报出一个警告

    但是我们是可以修改事件监听都最大值的,加上这行代码
    life.setMaxListeners(11)
    放在事件监听以前
    事件没有emit,on相应里面的动作是不会执行的,怎么判断一个事件emit了呢
    var hasEmit = life.emit('doOther','lucy');
    如果注册了,会返回true,如果没注册,会返回false
    可以删除某一个事件监听,怎么监听,第一不要写错名字removeListerner
    ,第二不能用匿名函数
    var EventEmitter = require('events').EventEmitter;
    var life = new EventEmitter();
     
    
    function water(who){
        console.log('给 ' + who + ' 倒水');
    }
    //这里不用on,也可以用addEventListener
    life.on('doSth', water)
     
    
    life.removeListerner('doSth',water);
    life.emit('doSth','Sunny');

    这样在10件事里面移除了倒水这件事



    在不知道各个注册事件下有多少个事件监听,可以通过下面的方式检测不同的事件下有多少个监听函数
    console.log( life.listeners('doSth').length )
    如果里面不指明哪个事件会返回0,
    另外一种获取事件监听长度的方式是
    console.log( EventEmitter.listenerCount(life,'doSth'))
    批量移除事件的方法
    life.removeAllListeners('doSth');
    如果里面事件名不写,则删除所有的事件兼容函数,不仅仅是doSth的监听函数
  • 相关阅读:
    建立一个能持续处理的C/S网络程序
    建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
    归并排序
    堆排序
    计数排序
    不要在PHP7中踩这些坑
    关于生活学习
    topthink/think-swoole 扩展包的使用 之 WebSocket
    PHP 三元运算符
    topthink/think-swoole 扩展包的使用 之 Task
  • 原文地址:https://www.cnblogs.com/wzndkj/p/9137798.html
Copyright © 2020-2023  润新知