node events,nodejs event
本文带你了解Node.js模块中的events模块,介绍什么是事件驱动,NodeJS的事件架构,Events模块的核心API等。希望对你有帮助!
node.js速度课程简介:进入学习
通过对Node的学习和应用,我们知道NodeJS采用单线程、事件驱动、非阻塞的I/O架构设计,非常适合高并发、I/O密集型的应用。
1. 什么是事件驱动?
事件驱动。简单来说就是通过有效的方法来监听事件状态的变化,并在变化时做出相应的动作。
拿一个生活应用场景来理解:我们去餐厅吃饭点餐,我们下单后,服务员告诉我们订单号(这个可以理解为注册一个事件),我们就坐着等。这个时候,我们的耳边总是响着服务员的叫号监听。当我们被叫的时候,我们可以去前台取餐。
2. 事件模型
NodeJS的事件架构采用经典订阅发布模式。
订阅模式,也可以称为消息机制,定义了一种依赖关系。这种依赖关系可以理解为一对N个(多个或单个)观察者同时监控一个对象相应的状态变化,一旦发生变化,通知所有观察者,从而触发观察者注册的相应事件。这种设计模式解决了主客体和观察者之间的功能耦合。
3. events模块
事件模块是nodeJS的一个非常重要的模块。Node中的大部分模块都继承了Events类,比如fs、http、net等。它提供了一个对象事件。EventEmitter,而EventEmitter的核心是事件发射和事件监听器。
简单使用:
从“事件”中导入{ event emitter };
MyEmiter类扩展了event emitter { };
const my emitter=new my emit er();
my mitter . on( hello ,()={
Console.log(你好有人叫你);
});
my mitter . emit( hello );
4. Events模块核心API
4.1 eventEmitter.on(eventName, callback)
注册监控事件。
参数:
EventName:事件名回调:事件触发被调用的回调函数4.2 eventEmitter.once(eventName, callback)。
您可以注册一个侦听器,对于一个特定的事件,它最多只能被调用一次。一旦事件被触发,监听器将被注销,然后被调用。
参数:
EventName:事件名回调:事件触发被调用的回调函数4.3 eventEmitter.emit(eventName[, ...args])。
触发指定的监听事件
参数:
EventName:事件名args的可选参数,按顺序传入回调函数的参数中;4.4 eventEmitter.removeListener(eventName, callback)
移除指定事件的侦听器。注意:监听器必须注册。否则无效。
参数:
事件名称:事件名称回调:回调函数4.5 EventEmitter.removeAllListeners(eventName)
删除所有侦听器。一个事件可以有多个侦听器。当需要删除所有侦听器时,可以使用此方法。
参数:
EventName:需要完全移除的事件的名称;需要注意的是,如果不传递参数,所有的监控事件都会被移除,比较暴力。建议慎用。
4.6 EventEmitter.listeners(eventName)
为名为eventName的事件返回侦听器绑定回调函数数组的副本。
4.7 EventEmitter.eventNames()
返回触发器已注册侦听器的事件数组。
4.8 EventEmitter.setMaxListeners(n)
默认情况下,如果为特定事件添加了10个以上的侦听器,EventEmitter将打印一条警告。
emitter.setMaxListeners()方法允许您修改这个特定EventEmitter实例的限制。该值可以设置为Infinity(或0 ),表示侦听器的数量不受限制。
5. 同步异步的问题
EventEmitter按照注册的顺序同步调用所有侦听器。这确保了事件的正确顺序,并有助于避免竞态条件和逻辑错误。
6.错误处理
当EventEmitter实例中出现错误时,典型的操作是触发“错误”事件。这些在Node.js中被视为特例
如果EventEmitter没有为“error”事件注册至少一个侦听器并触发“error”事件,它将抛出一个错误,打印堆栈跟踪,然后退出Node.js进程。
作为最佳实践,您应该始终为“错误”事件添加侦听器。
从“事件”中导入{ event emitter };
MyEmiter类扩展了event emitter { };
const my emitter=new my emit er();
my mitter . on( hello ,()={
Console.log(你好有人叫你);
});
my mitter . on( error ,(e)={
console.log(e)
})
my mitter . emit( hello );
Myemitter.emit (error ,new error( a error occurs ))关于node的更多信息,请访问:nodejs教程!以上是关于Node.js中events模块的详细介绍,更多内容请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。