• Node.js-事件模块(events)之监听方式


    事件模块

    events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。

    步骤:

    1. 引入系统提供的事件模块
    2. 实例化事件对象
    3. 注册事件
    4. 触发事件

    方法:

    1. 引入 events模块
      var events = require('events');
    2. 实例化事件对象
      var myEmitter = new events.EventEmitter();
    3. 注册事件
    myEmitter.on('someEvent',function (a,b,c) {
        console.log(a + b);
        console.log(c);
    });
    
    1. 触发事件
    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);

    
    **三. 移除所有监听: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);
    >```
  • 相关阅读:
    影评
    札记
    竞赛203
    竞赛201
    StopWatch的使用
    mysql:GROUP_CONCAT
    DispatcherServlet核心方法doDispatch解析
    class对象与实例对象
    mybatis与传统ORM框架的区别
    servlet容器中listener、filter、interceptor的启动顺序
  • 原文地址:https://www.cnblogs.com/webarn/p/6383955.html
Copyright © 2020-2023  润新知