zoukankan      html  css  js  c++  java
  • node.js中事件触发器events的使用

    node.js是基于事件驱动的,通过events,我们可以方便的创建事件,并通过触发事件来调用我们自定义的监听函数。

    所有能触发事件的对象都应该是 EventEmitter 类的实例,一般我们自定义一个类继承于 EventEmitter 类。

    通过on()方法我们可以绑定事件与监听函数:

    const Events = require('events');
    //自定义一个类,继承于EventEmitter类
    class MyEvent extends Events {
    
    }
    //实例化一个我们自定义的事件类
    let e = new MyEvent();
    //通过on来绑定事件与监听函数
    e.on('click', function () {
        console.log('点击了');
    });
    //通过emit触发事件
    e.emit('click');
    

    emit()方法可以传递多个参数给监听函数使用:

    const Events = require('events');
    //自定义一个类,继承于EventEmitter类
    class MyEvent extends Events {
    
    }
    //实例化一个我们自定义的事件类
    let e = new MyEvent();
    //通过on来绑定事件与监听函数
    e.on('click', function (...args) {
        args.forEach(function (value) {
            console.log(value);
        });
    });
    //通过emit触发事件
    e.emit('click', 1, 2, 3);
    

    addListener()方法是on()方法的别名,具体的使用,可以看on()方法。

    once() 方法添加单次执行的事件与监听函数,只会执行一次。

    const Events = require('events');
    //自定义一个类,继承于EventEmitter类
    class MyEvent extends Events {
    
    }
    //实例化一个我们自定义的事件类
    let e = new MyEvent();
    e.once('click', function () {
        console.log('点击');
    });
    //多次触发事件,只会执行一次
    e.emit('click');
    e.emit('click');
    e.emit('click');

    我们也可以通过 removeListener() 方法删除指定的监听处理函数,还有一个同名函数 off(),用法一样。

    const Events = require('events');
    //自定义一个类,继承于EventEmitter类
    class MyEvent extends Events {
    
    }
    //实例化一个我们自定义的事件类
    let e = new MyEvent();
    function click() {
        console.log('点击');
    }
    function move() {
        console.log('移动');
    }
    e.on('事件', click);
    e.on('事件', move);
    //触发事件
    e.emit('事件');
    
    //我们删除其中一个绑定事件
    e.off('事件', click);
    //再次触发事件后,被删除的绑定事件就无法执行了。
    e.emit('事件');
    

    当我们为某个事件绑定过多监听函数时,就会打印警告,默认是 10 个,我们可以使用 setMaxListeners() 来设置最大监听数量

    const Events = require('events');
    //自定义一个类,继承于EventEmitter类
    class MyEvent extends Events {
    
    }
    //实例化一个我们自定义的事件类
    let e = new MyEvent();
    function click() {
        console.log('点击');
    }
    
    //如果设置0,则表示不受限制
    e.setMaxListeners(0);
    
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    e.on('事件', click);
    
    e.emit('事件');
    

    通过 listeners() 函数可以返回指定事件的所有监听函数

    const Events = require('events');
    //自定义一个类,继承于EventEmitter类
    class MyEvent extends Events {
    
    }
    //实例化一个我们自定义的事件类
    let e = new MyEvent();
    
    function click() {
        console.log('点击');
    }
    function move() {
        console.log('移动');
    }
    
    e.on('事件', click);
    e.on('事件', move);
    
    //获取该事件的所有监听函数
    let arr = e.listeners('事件');
    //循环调用
    arr.forEach(function (fn) {
        fn();
    });
    

    通过 eventNames() 获取所有事件名数组

    const Events = require('events');
    //自定义一个类,继承于EventEmitter类
    class MyEvent extends Events {
    
    }
    //实例化一个我们自定义的事件类
    let e = new MyEvent();
    function click() {
        console.log('点击');
    }
    function move() {
        console.log('移动');
    }
    
    e.on('点击', click);
    e.on('移动', move);
    
    //获取所有事件名数组
    console.log(e.eventNames());
    

    事件对象的 'newListener' 和 'removeListener' 事件

    事件对象添加新的监听器之前,会触发自身的 'newListener' 事件。

    事件对象删除监听器后触发 'removeListener' 事件。

    const Events = require('events');
    
    class MyEvent extends Events {
    }
    
    let e = new MyEvent();
    
    //注意 'newListener' 事件是在添加监听器之前触发的
    e.once('newListener', function (eventName, listener) {
        console.log(eventName, '事件被添加');
        //所以这里的事件回调会先执行
        e.on('click', function () {
            console.log('我比点击了,先显示');
        });
    });
    
    //注意 'removeListener' 事件是在监听器移除后触发
    e.on('removeListener', function (eventName, listener) {
        console.log(eventName, '事件被删除');
    });
    
    //绑定click事件
    e.on('click', function () {
        console.log('点击了');
    });
    //触发click事件
    e.emit('click');
    
    //移除事件
    e.removeAllListeners('click');
    

      

  • 相关阅读:
    网页编码就是那点事
    .NetCore通过EFCore操作数据库
    我的第一个.netcore程序
    VisoStudio 允许局域网联机调试网站
    MVC 中使用扩展方法
    MVC 简单发送邮件示例
    ASP.NET MVC路由配置
    SQL 存储过程语句拼接愁人的时间类型
    生成并返回 json 结果文件
    Windows Live Writer配置测试
  • 原文地址:https://www.cnblogs.com/jkko123/p/10225030.html
Copyright © 2011-2022 走看看