当前位置 主页 > 网站技术 > 代码类 >

    node.JS事件机制与events事件模块的使用方法详解(2)

    栏目:代码类 时间:2020-02-06 15:08

    该方法添加一个单次 listener 函数到名为 eventName 的事件。 下次触发 eventName 事件时,监听器会被移除,然后调用

    eventName <any> 事件名

    listener <Function> 回调函数

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.on('test',function(){
      console.log(1);
    }).once('test',function(){
      console.log(2);
    });
    emitter.emit('test');//1 2
    emitter.emit('test');//1

    emitter.prependOnceListener()

    该方法用于将事件监听器添加到监听器数组开头。下次触发eventName事件时,监听器会被移除,然后调用

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.on('test',function(){
      console.log(1);
    }).prependOnceListener('test',function(){
      console.log(2);
    });
    emitter.emit('test');//2 1
    emitter.emit('test');//1

    emitter.removeAllListeners([eventName])

    eventName <any>

    移除全部或指定 eventName 的监听器,返回一个 EventEmitter 引用,可以链式调用

    [注意]在代码中移除其他地方添加的监听器是一个不好的做法,尤其是当 EventEmitter 实例是其他组件或模块(如 socket 或文件流)创建的

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.on('test',function(){
      console.log(1);
    }).removeAllListeners('test');
    emitter.emit('test');//''

    emitter.removeListener(eventName, listener)

    eventName <any>

    listener <Function>

    从名为 eventName 的事件的监听器数组中移除指定的 listener

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    function show(){
      console.log(1);
    }
    emitter.on('test',show).removeListener('test',show);
    emitter.emit('test');//''

    [注意]removeListener最多只会从监听器数组里移除一个监听器实例。如果任何单一的监听器被多次添加到指定eventName的监听器数组中,则必须多次调用removeListener才能移除每个实例

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    function show(){
      console.log(1);
    }
    emitter.on('test',show).on('test',show).removeListener('test',show);
    emitter.emit('test');//'1'

    [注意]一旦一个事件被触发,所有绑定到它的监听器都会按顺序依次触发。这意味着,在事件触发后、最后一个监听器完成执行前,任何 removeListener() 或 removeAllListeners() 调用都不会从 emit() 中移除它们。 随后的事件会像预期的那样发生

    因为监听器是使用内部数组进行管理的,所以调用它会改变在监听器被移除后注册的任何监听器的位置索引。 虽然这不会影响监听器的调用顺序,但意味着由 emitter.listeners() 方法返回的监听器数组副本需要被重新创建

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    function show1(){
      console.log(1);
      emitter.removeListener('test',show2);
    }
    function show2(){
      console.log(2);
    }
    emitter.on('test',show1).on('test',show2);
    emitter.emit('test');//1 2
    emitter.emit('test');//1

    设置

    emitter.eventNames()

    返回一个列出触发器已注册监听器的事件的数组。 数组中的值为字符串或符号

    var EventEmitter = require('events');
    var emitter = new EventEmitter();
    emitter.addListener('test1',function(){console.log(1);});
    emitter.addListener('test2',function(){console.log(2);});
    console.log(emitter.eventNames());//[ 'test1', 'test2' ]