分享更有价值
被信任是一种快乐

Node的events模块怎么使用

文章页正文上

这篇文章主要介绍了Node的events模块怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Node的events模块怎么使用文章都会有所收获,下面我们一起来看看吧。 在 vue 的项目中,有时我们会用到全局事件总线来管理组件之间的通信。vue2 项目里我们可以自己借助 $emit$on$off 封装一个 eventHub;vue3 中 $on$off 被移除了,我们可以使用 mitt 库或 tiny-emitter 库。在 node 里,则不用这么麻烦,其有个内置的 events 模块就可以帮我们实现对于事件的监听和发射。先使用 CommonJS 的语法导入得到 EventEmitter 类,然后生成实例 emitterEventEmitter 十分重要,比如后续文章会介绍的 stream 就是 EventEmitter 的实例):

constEventEmitter=require('events')
constemitter=newEventEmitter()

接着就可以使用 emitter.on() 对事件进行监听,传入的第 1 个参数就是事件名称,第 2 个参数为监听到事件被发射后要执行的回调,如果发射事件时有传入参数,会传递给回调函数,可以一个个单独获取,也可以像下面这样使用函数的剩余参数获取:

//监听事件
emitter.on('test',(...args)=>{
console.log(args)//[1,2,3]
})
//发射事件
emitter.emit('test',1,2,3)

如果只需要监听一次性事件,可以使用 emitter.once()

emitter.once('test',()=>{
console.log('监听到了事件发射')
})

emitter.emit('test')
emitter.emit('test')//本次发射不会触发打印

如果有多个地方如下例所示对事件进行了监听,一旦事件发射,那么监听回调会按顺序依次触发:

emitter.on('test',()=>{
console.log('监听到了事件发射,1')
})
emitter.on('test',()=>{
console.log('监听到了事件发射,2')
})
emitter.emit('test')

执行结果:如果想把监听事件添加到最前面,可以使用 emitter.prependListener()(或者 emitter.prependOnceListener(),即提前但只监听一次):

emitter.on('test',()=>{
console.log('监听到了免费云主机、域名事件发射,1')
})
emitter.prependListener('test',()=>{
console.log('监听到了事件发射,2')
})

emitter.emit('test')

现在的结果如下:可以使用 emitter.off()(或者 emitter.removeListener())移除对事件的监听,但需要传入对应的事件名称和回调函数,所以我们在监听时的回调就不能直接像上面这样定义在 emitter.on() 内部了,需要在外部定义然后传入对该回调的引用:

functionhandler(...args){
console.log(args)//[1,2,3]
}
emitter.on('test',handler)
emitter.emit('test',1,2,3)
emitter.off('test',handler)
emitter.emit('test','无法被监听到')

emitter.off()只能移除一个监听,且必须传入监听回调,如果有多次监听,想全部移除,可以使用 emitter.removeAllListeners()

emitter.on('test',handler)
emitter.on('test',handler)
emitter.on('test',handler)

emitter.removeAllListeners()

emitter.removeAllListeners()如果不传入任何参数,则移除所有事件名称的所有事件监听。其还可以传入事件名称,则移除对应事件名称的所有事件监听。监听器数量限制1 个 EventEmitter 对象上,某个事件名称的最大监听器数量默认为 10,这可以通过 emitter.getMaxListeners() 来验证:

console.log(emitter.getMaxListeners())//10

比如写了 11 次 emitter.on('test', handler),就会报错,提示说要用 emitter.setMaxListeners() 来增加最大限制数量:如果我们想知道当前 EventEmitter 对象上某个事件名称的监听器有多少个,有没有超过最大限制,可以使用 emitter.listenerCount() 传入事件名称查看:

console.log(emitter.listenerCount('test'))

获取事件名称和监听器使用 emitter.eventNames() 可以获取当前 EventEmitter 对象上注册的所有事件名称,返回的是由事件字符串组成的数组:

emitter.on('test1',handler)
emitter.on('test2',handler)

console.log(emitter.eventNames())//['test1','test2']

如果想获取某个事件对应的所有监听器,可以使用 emitter.listeners() 并传入事件名称:

functionhandler1(){}
functionhandler2(){}
emitter.on('test',handler1)
emitter.on('test',handler2)

console.log(emitter.listeners('test'))

得到的结果如下:关于“Node的events模块怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Node的events模块怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注云技术行业资讯频道。

相关推荐: JavaScript如何输入N个数据求平均数

本篇内容主要讲解“JavaScript如何输入N个数据求平均数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript如何输入N个数据求平均数”吧! 实现步骤:1、定义N个变量用于存入用户输入的数字,语法…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册