• 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');
    
  • 相关阅读:
    c++函数模板
    C++左移运算符重载
    and or bool and a or b 原理解释
    Python的垃圾回收机制
    《C++ 101条建议》学习笔记——第一章快速入门
    在应用中嵌入Python:转
    使用C++扩展Python的功能 转自:http://blog.csdn.net/magictong/article/details/8897568#comments
    python扩展实现方法--python与c混和编程 转自:http://www.cnblogs.com/btchenguang/archive/2012/09/04/2670849.html
    python文件头的#-*- coding: utf-8 -*- 的作用
    Pythhon 字典 key in dict 比 dict.has_key (key)效率高 为什么?
  • 原文地址:https://www.cnblogs.com/xianwang/p/5034656.html
Copyright © 2020-2023  润新知