6.NodeJs事件模块

作者: coderLfy | 来源:发表于2017-01-10 15:19 被阅读25次

    常用事件模块


    由于本人也是才开始学习Node,所以这里只简单的讲点Scott老师来视频中讲解的事件,后续在进行总结!

    官网Api

    首先导入events模块

    var EventEmitter = require('events').EventEmitter;
    var life = New EventEmitter();
    

    解释一下:

    Node.js核心API的大部分是围绕一个惯用的异步事件驱动架构构建的,其中某些类型的对象(称为“发射器”)周期性地发出命名事件,使得调用Function对象(“侦听器”)。

    添加一个事件(addListener)括号中的也可以使用

    on(eventName,listener)

    • 参数一:事件的名称或者字符串
    • 参数二:回调函数
    • 官方建议最多添加10事件,可更改最大值:emitter.setMaxListeners(num),多了容易内存泄漏
    life.on('EV', function(a) {
      console.log(a);//参数,由emit传递
    });
    

    创建事件是一个发射器,接受器 emit

    emitter.emit(eventName,[...args])
    返回值为boolean

    • true:有监听器
    • false:无
    var isTure = life.emit('EV','参数')//返回一个true
    //第二个参数会传递到on里的回调函数中去
    

    说到发出事件,接收事件,怎么删除呢? Scott老师在视频中也讲到了一个坑:不能移除一个匿名函数

    移除事件的时候只能移除具名函数

    移除某个事件:
    left.removeListener(eventName,listener)

    //Scott老师为了便于大家理解,写的伪代码
    function water(who){
        console.log('给'+ who + '倒水')!
    }
    life.on('求安慰',water);
    life.removeListener('求安慰',water);//解除成功
    

    移除全部事件:life.removeAllListeners(EventName)

    • 不传参数全部删除
    • 带参数:删除为参数名的事件

    获某个事件的集合:life.listeners(eventName)
    可以加length获得总数

    EventEmitter.listenerCount(eventName);4.0已被弃用
    官方推荐使用emitter.listenerCount(eventName)返回事件的数目

    相关文章

      网友评论

        本文标题:6.NodeJs事件模块

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