首页 > 语言 > JavaScript > 正文

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

2024-05-06 15:44:12
字体:
来源:转载
供稿:网友

node.JS事件机制说明

多数 Node.js 核心 API 都是采用惯用的异步事件驱动架构,其中某些类型的对象(称为触发器)会周期性地触发命名事件来调用函数对象(监听器)。例如,一个net.Server对象会在每次有新连接时触发一个事件;一个 fs.ReadStream 会在文件被打开时触发一个事件;一个 stream会在数据可读时触发事件。

EventEmitter

EventEmitter 类由 events 模块定义和开放的,所有能触发事件的对象都是 EventEmitter 类的实例

var EventEmitter = require('events');/*{ [Function: EventEmitter] EventEmitter: [Circular], usingDomains: false, defaultMaxListeners: [Getter/Setter], init: [Function], listenerCount: [Function] } */console.log(EventEmitter);

events模块的EventEmitter属性指向该模块本身

var events = require('events');console.log(events.EventEmitter === events);//trueEventEmitter是一个构造函数,可以用来生成事件发生器的实例emittervar EventEmitter = require('events');var emitter = new EventEmitter();/*EventEmitter { domain: null, _events: {}, _eventsCount: 0, _maxListeners: undefined } */console.log(emitter);

方法

emitter.emit(eventName[, ...args])

eventName <any>

...args <any>

该方法按监听器的注册顺序,同步地调用每个注册到名为eventName事件的监听器,并传入提供的参数。如果事件有监听器,则返回true,否则返回false

var EventEmitter = require('events');var emitter = new EventEmitter();emitter.on('test1',function(){});console.log(emitter.emit('test1'));//trueconsole.log(emitter.emit('test2'));//false

emitter.on(eventName, listener)

该方法用于添加listener函数到名为eventName的事件的监听器数组的末尾

eventName <any> 事件名

listener <Function> 回调函数

[注意]不会检查listener是否已被添加。多次调用并传入相同的eventName和listener会导致listener被添加与调用多次

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

该方法返回一个 EventEmitter 引用,可以链式调用

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

emitter.addListener(eventName, listener)

emitter.on(eventName, listener) 的别名

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

emitter.prependListener()

与on()方法不同,prependListener()方法可用于将事件监听器添加到监听器数组的开头

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选