node的事件发射器EventEmitter

来源:互联网 发布:国家数据 编辑:程序博客网 时间:2024/05/18 19:37
  • 核心事件模块 events
    我们说node是基于事件驱动的、异步的、单线程的平台,因此,事件驱动在node中处于非常核心的位置。在node中,有一个核心的模块叫做events,该模块提供了一个核心的类:EventEmiiter。

    引入该模块:

    var events = require("events");
  • 事件发射器EventEmitter
    EventEmitter(事件发射器)是node的核心部分,所有能够发射事件的类都继承于它,同时,也可以通过继承EventEmitter开发自己的事件发射器。

    创建EventMitter:

    var EventEmitter= require('events').EventEmitter;var channel = new EventEmitter();

    或者:

    var events = require('events');var channel = new events.EventEmitter();

    1、监听器listeners

    绑定到对象上的方法,在事件发射时执行,那么这种方法被称为做监听器(listeners)。在监听器方法内部,this关键字指向的对象为该监听器关联的EventListener。

    2、监听器的添加

    2.1 重复性事件每次触发事件,监听都重复执行,这样的事件称为“重复性事件”。
    emitter.addListener(event, listener)
    或者更简单的方式:
    emitter.on(event, listener)
    例如,以下代码给server对象添加一个connection事件的监听器,仅仅打印了一句话:
    server.on('connection', function (stream) {console.log('someone connected!');});
    但是,这种方式添加的监听函数,在每次事件被触发的时候都会执行一次,这种事件称为“重复性事件”,接下来我们看看一次性事件监听。

    2.2 一次性事件

    当第一次触发事件时,事件监听执行一次,然后立即被移出,再次触发事件时不会在被执行,这种事件成为“一次性事件”。

    添加一次性事件监听的api:

    emitter.once(event, listener)

    例如,下边的代码,仅在第一次connect事件触发时执行一次监听函数:

    server.once('connection', function (stream) {  console.log('Ah, we have our first user!');});
  • 监听器的移除

    emitter.removeListener(event, listener)
  • 其他api

    • 移除全部listner:emitter.removeAllListeners([event])
    • 设置最大监听器数量:emitter.setMaxListeners(n) 默认不超过10个,否则会警告,设置为0表示无限制。
    • 查看某一个对象在某一个事件的监听器:emitter.listeners(event)
    • 触发事件,执行监听器:emitter.emit(event[, arg1][, arg2][, ...])
    • 获取对象的给定事件的监听数量:Class Method: EventEmitter.listenerCount(emitter, event)
    • Event: 'newListener':当添加监听器时触发该事件,当该事件触发时,监听器可能还没有添加完成
    • Event: 'removeListener':当移除监听器时触发该事件,当该事件触发时,监听器可能还没有移除完成
原创粉丝点击