NodeJS学习——events

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,我是看的这个中文版

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

转载于:https://my.oschina.net/u/2430484/blog/678675

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值