zoukankan      html  css  js  c++  java
  • nodejs中EventEmitter

    在模块events中,定义了一个EventEmitter类,可以使用var EventEmitter = require('events');访问它。基本上所有发送事件的对象都是继承自EventEmitter。有基本属性和方法如下。

    • setMaxListeners(n)
      设置事件的最大监视者数量
    • getMaxListeners(n)
      获取事件的最大监视者数量
    • on(event, listener)/addListener(event, listener)
      为事件增添一个监视者
    • once(event, listener)
      为事件增添一个一次监视者
    • removeListener(event, listener)
      为事件删除一个监视者,注意listener指向同一个事件监听函数。
    • removeAllListeners([event])
      如果无参数,移除所有事件的监视者。如果参数为event,移除该事件的监视者。
    • listenerCount(event)
      获取特定事件的监视者数量。
    • listeners(event)
      获取特定事件的监听者列表。
    • _eventsCount
      事件的数量
    var EventEmitter = require('events');
    
    var em = new EventEmitter();
    em.setMaxListeners(2);
    
    var start = (data) => console.log(`data ${data} start`);
    var end = (data) => console.log(`data ${data} end`);
    
    em.on('data', start);
    em.on('data', end);
    
    em.once('close', () => console.log('close...'));
    
    console.log(`the max listeners value: ${em.getMaxListeners()}`);
    console.log(`the number of event: ${em._eventsCount}`);
    console.log(`the number of listeners the data event: ${em.listenerCount('data')}`);
    console.log(`the number of listeners the data close: ${em.listenerCount('close')}`);
    
    
    setInterval(() => {
        em.emit('data', 'eat');
        em.emit('data', 'play')
        em.emit('close');
    }, 1000);
    
    setTimeout(() => {
        em.removeListener('data', start);
        em.removeListener('data', end);
    }, 3000);
    

    写一个继承EventEmitter的对象。使用 util.inherits() 来完成对象的继承。

    var EventEmitter = require('events');
    var util = require('util');
    
    function MyStream() {
        EventEmitter.call(this);
    }
    
    util.inherits(MyStream, EventEmitter);
    
    MyStream.prototype.write = function (data){
        this.emit('write', data);
    }
    
    var stream = new MyStream();
    
    stream.on('write', function(data) {
        console.log(data);
    });
    
    stream.write('hello, world');
    

    再用ES6的class重写一下继承。

    var EventEmitter = require('events');
    
    class MyStream extends EventEmitter {
        write(data) {
            this.emit('write', data);
        }
    }
    
    var stream = new MyStream();
    stream.on('write', data => console.log(data));
    stream.write('hello, world');
    stream.write('hello, world');
    stream.write('hello, world');
    
  • 相关阅读:
    Flume基础(一):概述
    Hive高级(2):优化(2) 表的优化
    ospf命令
    Verizon 和某 BGP 优化器如何在今日大范围重创互联网
    BGP数据中心鉴别方法
    多线BGP鉴定
    mpls ldp neighbor 和loopbak
    ospf默认路由
    ospf
    ubuntu cloud init获取元数据失败
  • 原文地址:https://www.cnblogs.com/xianwang/p/5034656.html
Copyright © 2011-2022 走看看