Node.js EventEmitter
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。
EventEmitter 类
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
你可以通过require("events");来访问该模块。
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter();
EventEmitter 对象如果在实例化时发生错误,会触发 'error' 事件。当添加新的监听器时,'newListener' 事件会触发,当监听器被移除时,'removeListener' 事件被触发。
下面我们用一个简单的例子说明 EventEmitter 的用法:
//event.js 文件 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件触发'); }); setTimeout(function() { event.emit('some_event'); }, 1000);
执行结果如下:
运行这段代码,1 秒后控制台输出了 'some_event 事件触发'。其原理是 event 对象注册了事件 some_event 的一个监听器,然后我们通过 setTimeout 在 1000 毫秒以后向 event 对象发送事件 some_event,此时会调用some_event 的监听器。
$ node event.js some_event 事件触发
EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。
当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
让我们以下面的例子解释这个过程:
//event.js 文件 var events = require('events'); var emitter = new events.EventEmitter(); emitter.on('someEvent', function(arg1, arg2) { console.log('listener1', arg1, arg2); }); emitter.on('someEvent', function(arg1, arg2) { console.log('listener2', arg1, arg2); }); emitter.emit('someEvent', 'arg1 参数', 'arg2 参数');
执行以上代码,运行的结果如下:
$ node event.js listener1 arg1 参数 arg2 参数 listener2 arg1 参数 arg2 参数
以上例子中,emitter 为事件 someEvent 注册了两个事件监听器,然后触发了 someEvent 事件。
运行结果中可以看到两个事件监听器回调函数被先后调用。 这就是EventEmitter最简单的用法。
转自:nodejs菜鸟教程
相关推荐
使用setTimeout()延时执行
微型发射器 让您的事件及其侦听器在的情况下进行类型检查。 安装 只需使用npm添加依赖项: $ npm i tiny-typed-emitter 或使用纱线: $ yarn add tiny-typed-emitter ... 定义扩展EventEmitter的自定义类: clas
受Nodejs EventEmitter的启发。 概述New()EventEmmiter // New返回一个新的空EventEmmiter // AddListener是.On(eventName,listener)的别名。 用于Go编程语言的广告简单EventEmmiter。 受Nodejs EventEmitter的...
nodejs-简单登录案例入门初学 适合初学者,测试可用 包含代码
#EventEmitter4 1.2.3.4.4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 5....为什么是 EventEmitter... 为什么不是标准的 nodejs EventEmitter 9.5. 为什么不是 EventEmitter2 9.6. 为什么不是 EventEmitter3 10.联系方式10.1
nodejs架设简单的聊天室,socketio, nodejs.
扩展的跨平台,obratnosovmestimaya实现模块标准库NodeJS 。 附加 API 旨在提高代码的可用性和可读性。 为此,引入了以下机制: ## 与原版的区别: 标准事件: EventEmitter.MAX_LISTENERS = 10 默认情况下事件处理...
nodejs创建简易web服务器与文件读写的实例.docx
nodejs&websocket简易聊天demo
nodejs简单登录案例
主要介绍了nodejs简单读写excel内容的方法,简单分析了nodejs常见的读写Excel模块,并结合实例形式分析了nodejs读写Excel具体操作技巧,需要的朋友可以参考下
这是个最新的0.4.3版的nodejs window下编译好的包,只要解压到指定位置(建议不要在含有中文的目录中),然后在系统path中加入本包所在根目录,即可使用nodejs编程。跳过了很多繁琐的编译步骤,使得windows下体验...
主要介绍了nodejs实现超简单生成二维码的方法,结合实例形式分析了nodejs基于qr-image插件生成二维码的相关操作技巧,需要的朋友可以参考下
通过nodeJS启简单服务1
nodejs初级教程
使用nodejs+express+ejs做的简易聊天室
完整的使用nodejs编写的httpproxy,代理速度非常快,代码简洁明了但不简单
node-whois, 用于NodeJS的简单WHOIS客户端 node node WHOIS是 Node.js.的WHOIS客户端安装全局$ npm install -g whois用法whois [options] addressOptions:
主要为大家详细介绍了NodeJs实现一个简易WEB上传下载服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下