美文网首页Nodejs学习笔记
nodejs笔记3(EventEmitter)

nodejs笔记3(EventEmitter)

作者: XKolento | 来源:发表于2018-11-09 13:36 被阅读0次

    Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

    1.EventEmitter 类

    events是nodejs中的一个模块,它可以提供一个对象 events.EventEmitter()
    EventEmitter的核心功能就是事件触发器和事件监听了。
    同样的我们可以通过 require('events') 来获取该模块

    // 引入 events 模块
    var events = require('events');
    // 创建 eventEmitter 对象
    var eventEmitter = new events.EventEmitter();
    

    EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。

    2.event demo

    event在一秒后执行 some_event
    event监听 some_event,此时进行回调,打印结果。

    var EventEmitter = require('events').EventEmitter; 
    var event = new EventEmitter(); 
    event.on('some_event', function() { 
        console.log('some_event 事件触发'); 
    }); 
    setTimeout(function() { 
        event.emit('some_event'); 
    }, 1000); 
    

    EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。

    当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。

    3.EventEmitter各种方法介绍

    ①addListener(event, listener)
    为指定的事件添加监听器
    ②on(event, listener)
    为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。

    server.on('connection', function (stream) {
      console.log('someone connected!');
    });
    

    ③once(event, listener)
    为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。

    server.once('connection', function (stream) {
      console.log('Ah, we have our first user!');
    });
    

    ④removeListener(event, listener)
    移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
    它接受两个参数,第一个是事件名称,第二个是回调函数名称。

    var callback = function(stream) {
      console.log('someone connected!');
    };
    server.on('connection', callback);
    server.removeListener('connection', callback);
    

    ⑤removeAllListeners([event])
    移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
    ⑥setMaxListeners(n)
    默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于提高监听器的默认限制的数量。
    ⑦listeners(event)
    返回指定事件的监听器数组。
    ⑧emit(event, [arg1], [arg2], [...])
    按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。

    4.EventEmitter demo
    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    
    //监听器1
    var listener1 = function listener1(){
        console.log('监听器 listener1 执行')
    }
    
    //监听器2
    var listener2 = function listener2(){
        console.log('监听器 listener2 执行')
    }
    
    // 绑定 connection 事件,处理函数为 listener1 
    eventEmitter.addListener('connection',listener1);
    
    // 绑定 connection 事件,处理函数为 listener2
    eventEmitter.on('connection', listener2);
    
    var eventListeners = eventEmitter.listenerCount('connection');
    console.log(eventListeners+"个 监听器监听连接事件")
    
    //触发 connection 事件
    eventEmitter.emit('connection');
    
    eventEmitter.removeListener('connection',listener1);
    console.log('listener1 监听取消')
    
    //触发连续事件
    eventEmitter.emit('connection');
    
    eventListeners = eventEmitter.listenerCount('connection');
    console.log(eventListeners+'个监听器监听连接事件');
    
    console.log('程序执行完毕');
    

    ①首先添加2个方法 listener1 和 listener2
    ②然后监听方法 connection,执行的时候,回调listener1
    var eventListeners = eventEmitter.listenerCount('connection');获取监听事件个数并且在下面打印出来
    ④使用emit触发 connection 事件
    ⑤让listener1 方法取消对 connection 的监听
    ⑥再次触发 connection
    ⑦重新统计 监听个数并且打印结果

    相关文章

      网友评论

        本文标题:nodejs笔记3(EventEmitter)

        本文链接:https://www.haomeiwen.com/subject/hlmwxqtx.html