L'émetteur d'événement de nœud

Comment travailler avec des événements personnalisés dans Node

Si vous avez travaillé avec JavaScript dans le navigateur, vous savez dans quelle mesure l'interaction de l'utilisateur est gérée par des événements: clics de souris, pressions sur les boutons du clavier, réaction aux mouvements de la souris, etc.

Du côté du backend, Node nous offre la possibilité de construire un système similaire en utilisant leeventsmodule.

Ce module, en particulier, offre laEventEmitterclass, que nous utiliserons pour gérer nos événements.

Vous initialisez un objet EventEmitter à l'aide de cette syntaxe:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

Cet objet expose, parmi tant d'autres, leonetemitméthodes.

  • emitest utilisé pour déclencher un événement
  • onest utilisé pour ajouter une fonction de rappel qui sera exécutée lorsque l'événement est déclenché

Émettre et écouter les événements

Par exemple, créons unstartévénement, et comme une question de fournir un échantillon, nous réagissons à cela en nous connectant simplement à la console:

eventEmitter.on('start', () => {
  console.log('started')
})

Quand nous courons

eventEmitter.emit('start')

la fonction de gestionnaire d'événements est déclenchée et nous obtenons le journal de la console.

addListener()est un alias pouron(), au cas où vous voyez cela utilisé.

Passer des arguments à l'événement

Vous pouvez passer des arguments au gestionnaire d'événements en les passant comme arguments supplémentaires àemit():

eventEmitter.on('start', (number) => {
  console.log(`started ${number}`)
})

eventEmitter.emit(‘start’, 23)

Plusieurs arguments:

eventEmitter.on('start', (start, end) => {
  console.log(`started from ${start} to ${end}`)
})

eventEmitter.emit(‘start’, 1, 100)

Écoutez un événement une seule fois

L'objet EventEmitter expose également leonce(), que vous pouvez utiliser pour créer un écouteur d'événement à usage unique.

Une fois cet événement déclenché, l'auditeur cesse d'écouter.

Exemple:

eventEmitter.once('start', () => {
  console.log(`started!`)
})

eventEmitter.emit(‘start’) eventEmitter.emit(‘start’) //not going to fire

Suppression d'un écouteur d'événement

Une fois que vous avez créé un écouteur d'événements, vous pouvez le supprimer à l'aide duremoveListener()méthode.

Pour ce faire, il faut d'abord avoir une référence à la fonction de rappel deon.

Dans cet exemple:

eventEmitter.on('start', () => {
  console.log('started')
})

Extrayez le rappel:

const callback = () => {
  console.log('started')
}

eventEmitter.on(‘start’, callback)

Pour que plus tard, vous puissiez appeler

eventEmitter.removeListener('start', callback)

Vous pouvez également supprimer tous les écouteurs à la fois sur un événement, en utilisant:

eventEmitter.removeAllListeners('start')

Enregistrement des événements

LeeventNames(), appelée sur une instance d'objet EventEmitter, retourne un tableau de chaînes qui représentent les événements enregistrés sur le EventListener actuel:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

eventEmitter.on(‘start’, () => { console.log(‘started’) })

eventEmitter.eventNames() // [ ‘start’ ]

listenerCount()renvoie le nombre d'écouteurs de l'événement passé en paramètre:

eventEmitter.listenerCount('start') //1

Ajouter plus d'auditeurs avant / après les autres

Si vous avez plusieurs auditeurs, leur ordre peut être important.

Une instance d'objet EventEmitter propose des méthodes pour travailler avec l'ordre.

emitter.prependListener()

Lorsque vous ajoutez un auditeur à l'aide deonouaddListener, il est ajouté en dernier dans la file d'attente des écouteurs et appelé en dernier. UtilisantprependListeneril est ajouté et appelé avant les autres auditeurs.

emitter.prependOnceListener()

Lorsque vous ajoutez un auditeur à l'aide deonce, il est ajouté en dernier dans la file d'attente des écouteurs et appelé en dernier. UtilisantprependOnceListeneril est ajouté et appelé avant les autres auditeurs.

Téléchargez mon gratuitManuel de Node.js


Plus de didacticiels sur les nœuds: