文档章节

NodeJS学习——events

嗯嗯哈
 嗯嗯哈
发布于 2016/05/20 16:57
字数 801
阅读 34
收藏 0

NodeJS学习——events模块

**ps:**这里介绍的只是events模块的一部分,不是全部内容

events模块值提供了一个对象events.EventEmitter,核心就是事件发射和事件监听

我们通过require('events')使用events模块

emitter.on(event, listener)

添加一个 listener 至特定事件的 listener 数组尾部

**emitter.addListener(event, listener)**有相同的效果

// 调用events模块,获取events.EventEmitter对象
var EventEmitter = require('events').EventEmitter
var ee = new EventEmitter()

// EventEmitter.on(event, listener) 为事件注册一个监听器
// event: 字符串, 事件名
// listener: 回调函数
ee.on('some_event', function(first_name, last_name) {
    console.log("第1个监听事件,我姓" + last_name + ", 叫" + first_name);
})

emitter.emit(event,[arg1],[arg2],[...])

使用提供的参数按顺序执行指定事件的 listener

上面的代码中我们只是注册了some_event事件,并没有触发,所以在执行的时候不会有任何输出

下面我们来触发注册号的监听事件,让程序输出一些东西

// 调用events模块,获取events.EventEmitter对象
var EventEmitter = require('events').EventEmitter
var ee = new EventEmitter()

// EventEmitter.on(event, listener) 为事件注册一个监听器
// event: 字符串, 事件名
// listener: 回调函数
ee.on('some_event', function(first_name, last_name) {
    console.log("第1个监听事件,我姓" + last_name + ", 叫" + first_name);
})
console.log('第一轮');
ee.emit('some_event', 'xiaoming', 'wang')

emitter.once(event, listener)

添加一个 一次性 listener,这个 listener 只会在下一次事件发生时被触发一次,触发完成后就被删除。

emitter.removeListener(event, listener)

从一个事件的 listener 数组中删除一个 listener 注意:此操作会改变 listener 数组中在当前 listener 后的listener 的位置下标

ps:第二个参数listener:some_event注册事件的回调函数名称

// 调用events模块,获取events.EventEmitter对象
var EventEmitter = require('events').EventEmitter
var ee = new EventEmitter()

var listener = function(foo, bar) {
    console.log('第1个监听事件,参数foo=' + foo + ", bar=" + bar);
}
ee.on('some_event', listener)
ee.on('other_event', listener)

ee.removeListener('some_event', listener)
console.log('第一轮')
ee.emit('some_event', 'xiaoming', 'wang')
ee.emit('other_event', 'haha', 'en')

emitter.removeAllListeners([event])

删除所有 listener,或者删除某些事件 (event) 的 listener

只需要传入注册的事件名就可以了,如果没有传入任何事件,则删除所有监听事件

var EventEmitter = require('events').EventEmitter
var ee = new EventEmitter()

var listener = function(foo, bar) {
    console.log('第1个监听事件,参数foo=' + foo + ", bar=" + bar);
}
ee.on('some_event', listener)
ee.on('other_event', listener)

ee.removeAllListeners()
console.log('第一轮')
ee.emit('some_event', 'xiaoming', 'wang')
ee.emit('other_event', 'haha', 'en')

emitter.setMaxListeners(n)

默认情况下,EventEmitter 会在多于 10 个 listener 监听某个事件的时候出现警告,此限制在寻找内存泄露时非常有用。设置0这样可以没有限制。

var EventEmitter = require('events').EventEmitter
var ee = new EventEmitter()

//NodeJS采用异步编程方式,如果使用正常的for循环来写下面的代码会发现输出的信息不是我们想要的结果,可以踩下坑,哦,也不算是坑...
for (var i = 0; i < 11; i++) {
    (function(j) {
        ee.on('some_event', function() {
            console.log('第' + (j + 1) + '个监听事件');
        })
    })(i)
}
ee.emit("some_event")

上面的代码中我们给some_event添加了11个监听,执行程序会有警告信息输出,在for循环前添加ee.setMaxListeners(11),再执行程序。

就写这些吧,剩下的可以看官方API,我是看的这个中文版

第一次写这个,有什么问题请大家指正一下

© 著作权归作者所有

嗯嗯哈
粉丝 1
博文 3
码字总数 1701
作品 0
闵行
前端工程师
私信 提问
Node.js 叒更新了,修复了 9.6.0 中出现的回归错误

在发布 9.6.0 不久后,Node.js 又发布了 9.6.1 —— 专门修复 9.6.0 出现的潜在 Semver-Major 回归错误。有以下值得关注的变化: events: being set to by default was removed in 9.6.0 whi...

局长
2018/02/24
1K
9
《Node.js开发指南》书评汇总

刚查了下库存,发现订阅《Node.js开发指南》的读者大增,这是为什么呢?看了下近期本书在豆瓣的评论,口碑很好,现将豆瓣的书评汇总如下: ----------------------------------------------...

生气的散人
2012/10/15
3.3K
3
《Node.js开发指南》书评汇总

刚查了下库存,发现订阅《Node.js开发指南》的读者大增,这是为什么呢?看了下近期本书在豆瓣的评论,口碑很好,现将豆瓣的书评汇总如下: ----------------------------------------------...

生气的散人
2012/10/15
664
0
nodejs实践--模块Request学习

官方文档 npm官网--request 文章来自:Request —— 让 Node.js http请求变得超简单 先前一直比较关注前端的东西,对后端了解较少。不过一直对Node.js比较感兴趣,去年12月还去参加了阿里的C...

spinachgit
2018/08/30
54
0
Hyperledger Fabric 1.1 发布,基于区块链的分布式账本

由 Linux 基金会发起创建的开源区块链分布式账本 —— Hyperledger Fabric,已经迎来了 1.1 版本。该项目着重于性能和可靠性,以及推动区块链和分布式账本技术的跨行业协作。Hyperledger Fab...

周其
2018/03/21
3.8K
6

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
22
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
17
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
29
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部