Node.js事件发射器
在Node很多对象发出事件,例如net.Server每个同级连接到它,一个fs.readStream发出打开文件事件时,每次都发出一个事件。 它发出事件的所有对象都是events.EventEmitter的实例。
EventEmitter 类
正如我们已经看到在上一节,EventEmitter类在于事件的模块。它是通过通俗易懂的语法如下:
// Import events module var events = require('events'); // Create an eventEmitter object var eventEmitter = new events.EventEmitter();
EventEmitter实例对任何错误,它会发出一个“error”事件。当新的侦听器被添加,“newListener'事件被触发,当一个侦听器被删除,'removeListener”事件被触发。
EventEmitter提供多种性能如在发射。On属性用于绑定事件函数,发射用于触发一个事件。
方法
S.N. | 方法 & 描述 |
---|---|
1 | addListener(event, listener) 添加一个监听器监听器数组指定事件的结束。没有进行检查,以查看是否侦听器已经添加。多次调用传递事件和监听器的相同组合,将导致在侦听器被添加多次。返回发射器,所以调用可以链接。 |
2 | on(event, listener) 添加一个监听器监听器数组在未尾指定事件. 没有进行检查,以查看是否侦听器已经添加。多次调用传递事件和监听器的相同组合,将导致在侦听器被添加多次。返回发射器,所以调用可以链接。 |
3 | once(event, listener) 增加一次监听事件。 监听器调用仅在下一次事件被触发,之后被删除。返回发射器,所以调用可以链接。 |
4 | removeListener(event, listener) 从侦听器数组指定事件删除监听器。注意:改变数组索引侦听器后面监听器数组中。removeListener将从监听数组中删除至多侦听器一个实例。如果任何一个监听器已经被多次添加到侦听数组指定事件,然后removeListener必须多次删除每个实例。返回发射器,所以调用可以链接。 |
5 | removeAllListeners([event]) 删除所有监听器,或者那些指定的事件。这不是一个好主意,删除在其他地方添加代码,特别是当它在还没有创建(如套接字或文件流)发射器监听器。 返回发射器,所以调用可以链接。 |
6 | setMaxListeners(n) 默认情况下EventEmitters将打印一个警告,如果超过10个监听器添加特定事件。这是一个有用的默认这有助于发现内存泄漏。显然,并非所有的发射器应限制在10个,此功能允许增加。设置为零无限制。 |
7 | listeners(event) 返回监听器为指定事件的数组。 |
8 | emit(event, [arg1], [arg2], [...]) 为了与提供的参数执行每一个监听器。如果事件有监听器返回true,否则为false。 |
类方法
S.N. | 方法 & 描述 |
---|---|
1 | listenerCount(emitter, event) 返回对于一个给定的事件监听器的数量。 |
事件
S.No. | 事件 & 描述 |
---|---|
1 | newListener
此事件发出的侦听器在任何时间添加。当该事件被触发,监听器可能还没有被添加到监听的数组,用于该事件。 |
2 | removeListener
此事件发出任何时当要删除一个侦听器。当该事件被触发,监听器可能还没有被从监听的阵列删除,而用于在事件中删除。 |
例子
创建一个名为main.js,使用以下Node.js的代码js文件:
var events = require('events'); var eventEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 executed.'); } // Bind the connection event with the listner1 function eventEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function eventEmitter.on('connection', listner2); var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); // Fire the connection event eventEmitter.emit('connection'); // Remove the binding of listner1 function eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); // Fire the connection event eventEmitter.emit('connection'); eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); console.log("Program Ended.");
现在运行main.js看到的结果:
$ node main.js
验证输出
2 Listner(s) listening to connection event listner1 executed. listner2 executed. Listner1 will not listen now. listner2 executed. 1 Listner(s) listening to connection event Program Ended.
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
Node.js事件发射器的更多相关文章
- Node.js事件的正确使用方法
前言 事件驱动的编程变得流行之前,在程序内部进行通信的标准方法非常简单:如果一个组件想要向另外一个发送消息,只是显式地调用了那个组件上的方法.但是在 react 中用的却是事件驱动而不是调用. 事件的 ...
- Node.js 事件
Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, ...
- Node.js 事件循环(Event Loop)介绍
Node.js 事件循环(Event Loop)介绍 JavaScript是一种单线程运行但又绝不会阻塞的语言,其实现非阻塞的关键是“事件循环”和“回调机制”.Node.js在JavaScript的基 ...
- Node.js事件循环
Node JS是单线程应用程序,但它通过事件和回调概念,支持并发. 由于Node JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性.Node JS使用观察者模式.Node ...
- node.js零基础详细教程(4):node.js事件机制、node异步IO操作
第四章 建议学习时间3小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- 6、Node.js 事件循环
#########################################################################################Node.js 事件循 ...
- The Node.js Event Loop, Timers, and process.nextTick() Node.js事件循环,定时器和process.nextTick()
个人翻译 原文:https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/ The Node.js Event Loop, Ti ...
- Node.js 事件循环
Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发. Node.j ...
- Node.js 学习(五)Node.js 事件循环
Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发. Node.j ...
随机推荐
- 初识phaser框架——开源的HTML5 2D游戏开发框架
背景: 在网上看到,65行实现flappy bird,感到很好奇.原来是使用开源的2D游戏框架 phaser开发的. 什么是phaser2D游戏开发框架呢? 借鉴与网上的资料: 1. Phase ...
- C#截取指定字符串函数
本文转载:http://www.cnblogs.com/liufei88866/archive/2012/05/12/2497395.html 一.通过函数方式进行获取. public string ...
- iOS 8 设置导航栏的背景颜色和背景图片
假设是storyboard 直接embed一个导航栏.然后在新出现的导航栏 选属性 选一下颜色就能够了 代码实现背景颜色改动:self.navigationController.navigationB ...
- Java语言基础(七)
Java语言基础(七) 今天在公司多呆了会,回来晚了 一.自动类型转换 在Java中,数据是可以转换的 例如可以将byte类型的赋给int类型的 这里希望你了解内存的变化,例如 在这里,我想你应该知 ...
- Java基础知识强化08:将字符串倒序输出(包括空格)的几种方法
1.最容易想到的估计就是利用String类的toCharArray(),再倒序输出数组的方法了: package himi.hebao05; public class TestDemo02 { pub ...
- vim 缩写abbreviation
创建 :ab abbreviation pharse 取消 :unab abbreviation 缩写使用 insert模式下输入缩写,Enter键获得pharse.
- [O] SQLite数据库报错:no such column
在SQLite数据库创建语句增加列,运行后报错:no such column 在语法规范的前提下,即 //SQLite数据库创建,逗号与空格须严格 String CREATE_NOTE = " ...
- CI 笔记(1)
1. 下载CI,官方网站,目前3.x版本已经更新,2.2.6版本为2.x版本的最后的一个版本.为了和视频教材一致,使用CI 2.x版本 2. 目录结构,从application里面的,controll ...
- Orace数据库锁表的处理与总结<摘抄与总结二>
当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误. TX锁等待的分析 Oracle数据库中一般使用行级锁. 当Oracle ...
- OC - 27.CATransition
概述 简介 CATransition又称转场动画,是CAAnimation的子类,可以直接使用 转场动画主要用于为图层提供移入/移出屏幕的动画效果 转场动画常见的应用是UINavigationCont ...