Maison > Article > interface Web > Parlons du module d'événements dans Node.js
Cet article vous amènera à comprendre le module d'événements dans le module Node.js et à présenter ce qui est piloté par les événements, l'architecture des événements de NodeJS, l'API principale du module Événements, etc. J'espère qu'il vous sera utile à tout le monde !
Citant la description officielle : La majeure partie de l'API de base de Node.js est construite autour d'une architecture événementielle asynchrone idiomatique, dans laquelle certains types d'objets (appelés "déclencheurs") déclenchent un événement nommé qui provoque le Fonction ("écouteur") à appeler.
Function
对象("监听器")被调用。
通过对Node的学习及应用,我们知道NodeJS其采用单线程、事件驱动、非阻塞I/O等架构设计,非常适用于高并发、I/O密集型应用。
事件驱动,简单来说就是通过有效方法来监听事件状态的变化,并在发生变化时做出相应的动作。
举一个生活应用的场景来理解:当我们去饭店吃饭点餐,当我们下单之后,服务员告诉我们的订单号(这时候可以理解为注册了一个事件),我们在坐着等候,这时候我们的耳朵就一直监听着服务员的喊号,当喊到我们的时候,我们可以去前台取餐。
NodeJS的事件架构采用经典的--订阅发布模式
订阅发布模式,也可以称之为消息机制,定义了一种依赖关系,这种依赖关系可以理解为 1对N(多个或者单个)观察者们同时监听某一个对象相应的状态变换,一旦变化则通知到所有观察者,从而触发观察者注册的相应事件,该设计模式解决了主体对象与观察者之间功能的耦合。
events模块是NodeJS非常重要的一个模块,在node中大部分的模块的实现都继承了Events类,如fs,http,net等。它提供了一个对象events.EventEmitter,EventEmitter 的核心是事件发射与事件监听器。
简单使用:
import { EventEmitter } from 'events'; class MyEmiter extends EventEmitter{}; const myEmitter = new MyEmiter(); myEmitter.on('hello', () => { console.log('hello 有人喊你啦'); }); myEmitter.emit('hello');
4.1 eventEmitter.on(eventName, callback)
注册监听事件
参数:
4.2 eventEmitter.once(eventName, callback)
可以注册一个监听器,该监听器最多为特定事件调用一次。 一旦事件被触发,则监听器就会被注销然后被调用。
参数:
4.3 eventEmitter.emit(eventName[, ...args])
触发指定的监听事件
参数:
4.4 eventEmitter.removeListener(eventName, callback)
移除指定事件的监听器,注意:该监听器必须是注册过的。否则无效。
参数:
4.5 EventEmitter.removeAllListeners(eventName)
移除所有监听器,一个事件可以有多个监听,需要全部移除时,可以用此方法。
参数:
需要特别注意的是,如果不传参数,将会移除所有的监听事件,比较暴力,建议慎用。
4.6 EventEmitter.listeners(eventName)
返回名为 eventName
的事件的监听器绑定回调函数数组的副本。
4.7 EventEmitter.eventNames()
返回列出触发器已为其注册监听器的事件的数组。
4.8 EventEmitter.setMaxListeners(n)
默认情况下,如果为特定事件添加了 10
个以上的监听器,则 EventEmitter
将打印警告。
emitter.setMaxListeners() 方法允许修改此特定 EventEmitter
实例的限制。 该值可以设置为 Infinity
(或 0
)以指示无限数量的监听器。
EventEmitter
按照注册的顺序同步
地调用所有监听器。这确保了事件的正确排序,并有助于避免竞争条件和逻辑错误。
当 EventEmitter
实例中发生错误时,典型的操作是触发 'error'
import { EventEmitter } from 'events'; class MyEmiter extends EventEmitter{}; const myEmitter = new MyEmiter(); myEmitter.on('hello', () => { console.log('hello 有人喊你啦'); }); myEmitter.on('error', (e) => { console.log(e) }) myEmitter.emit('hello'); myEmitter.emit('error', new Error('an error happen'))
eventEmitter.on(eventName, callback)
🎜🎜Inscrivez-vous pour écouter pour les événements🎜 🎜Paramètres :🎜 eventEmitter.once(eventName , callback)
🎜🎜Vous pouvez enregistrer un auditeur qui sera appelé au plus une fois pour un événement spécifique. Une fois l'événement déclenché, l'écouteur est désenregistré puis appelé. 🎜🎜Paramètres : 🎜eventEmitter. émettre( eventName[, ...args])
🎜🎜Déclencher l'événement d'écoute spécifié🎜🎜Paramètres :🎜eventEmitter.removeListener(eventName, callback)
🎜🎜Supprimer l'écouteur pour l'écouteur d'événement spécifié, remarque : l'écouteur doit être enregistré. Sinon, c'est invalide. 🎜🎜Paramètres : 🎜EventEmitter.removeAllListeners(eventName) li> code>
🎜🎜Supprimer tous les auditeurs. Un événement peut avoir plusieurs auditeurs. Si vous devez tous les supprimer, vous pouvez utiliser cette méthode. 🎜🎜Paramètres : 🎜Il est important de noter que si aucun paramètre n'est passé, tous les événements sera supprimé La surveillance des événements est relativement violente, il est donc recommandé de l'utiliser avec prudence.
🎜🎜4.6 EventEmitter.listeners(eventName)
🎜🎜Renvoie le tableau de fonctions de rappel de liaison d'écouteur pour l'événement nommé eventName
copie de . 🎜🎜4.7 EventEmitter.eventNames()
🎜🎜Renvoie un tableau répertoriant les événements pour lesquels le déclencheur a enregistré des auditeurs. 🎜🎜4.8 EventEmitter.setMaxListeners(n)
🎜🎜Par défaut, si plus de 10
auditeurs sont ajoutés pour un événement spécifique, alors EventEmitter
imprimera un avertissement. La méthode 🎜🎜emitter.setMaxListeners() permet de modifier les limites de cette instance EventEmitter
spécifique. La valeur peut être définie sur Infinity
(ou 0
) pour indiquer un nombre illimité d'auditeurs. 🎜EventEmitter
appelle tous les auditeurs synchrone
dans l'ordre d'enregistrement. Cela garantit un ordre correct des événements et permet d’éviter les conditions de concurrence et les erreurs logiques. 🎜EventEmitter
, l'opération typique consiste à déclencher 'error' code> événement. Ceux-ci sont traités comme des cas particuliers dans Node.js. 🎜<p>如果 <code>EventEmitter
没有为 'error'
事件注册至少一个监听器,并且触发 'error'
事件,则会抛出错误,打印堆栈跟踪,然后退出 Node.js 进程。
作为最佳实践,应始终为 'error'
事件添加监听器。
import { EventEmitter } from 'events'; class MyEmiter extends EventEmitter{}; const myEmitter = new MyEmiter(); myEmitter.on('hello', () => { console.log('hello 有人喊你啦'); }); myEmitter.on('error', (e) => { console.log(e) }) myEmitter.emit('hello'); myEmitter.emit('error', new Error('an error happen'))
更多node相关知识,请访问:nodejs 教程!!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!