Qu'est-ce qu'un «émetteur d'événement»?

En parcourant http://microjs.com , je vois beaucoup de bibliothèques étiquetées «émetteurs d'événements». J'aime penser que je connais très bien les bases de la langue javascript, mais je n'ai vraiment aucune idée de ce qu'est ou non un «émetteur d'événements».

Quelqu'un sois-il envie de m'éclairer? Ça semble intéressant…

L'émetteur d'événement tel qu'il semble est juste quelque chose qui déclenche un événement auquel n'importe qui peut écouter. Différentes bibliothèques offrent des implémentations différentes et à des fins différentes, mais l'idée de base est de fournir un cadre pour l'émission d'événements et leur abonnement.

Exemple de jQuery:

// Subscribe to event. $('#foo').bind('click', function() { alert("Click!"); }); // Emit event. $('#foo').trigger('click'); 

Cependant, avec jQuery pour émettre un événement, vous devez avoir un objet DOM et ne peut pas émettre des événements à partir d'un objet arbitraire. C'est là que l'émetteur d'événement devient utile. Voici un pseudo-code pour les événements personnalisés de démonstration (le même modèle que ci-dessus):

 // Create custom object which "inherits" from emitter. Keyword "extend" is just a pseudo-code. var myCustomObject = {}; extend(myCustomObject , EventEmitter); // Subscribe to event. myCustomObject.on("somethingHappened", function() { alert("something happened!"); }); // Emit event. myCustomObject.emit("somethingHappened"); 

Dans node.js, un événement peut être décrit simplement comme une chaîne avec un rappel correspondant. Un événement peut être "émis" (ou en d'autres termes, le rappel correspondant soit appelé) plusieurs fois ou vous pouvez choisir d'écouter pour la première fois qu'il est émis.

Exemple:-

 var example_emitter = new (require('events').EventEmitter); example_emitter.on("test", function () { console.log("test"); }); example_emitter.on("print", function (message) { console.log(message); }); example_emitter.emit("test"); example_emitter.emit("print", "message"); example_emitter.emit("unhandled"); > var example_emitter = new (require('events').EventEmitter); {} > example_emitter.on("test", function () { console.log("test"); }); { _events: { test: [Function] } } > example_emitter.on("print", function (message) { console.log(message); }); { _events: { test: [Function], print: [Function] } } > example_emitter.emit("test"); test //console.log'd true //return value > example_emitter.emit("print", "message"); message //console.log'd true //return value > example_emitter.emit("unhandled"); false //return value 

Cela démontre toute la fonctionnalité de base d'un EventEmitter . La méthode on or addListener (essentiellement la méthode d'abonnement) vous permet de choisir l'événement à surveiller et le rappel à appeler. La méthode d'émission (la méthode de publication), d'autre part, vous permet d'émettre un événement, ce qui provoque tous les rappels enregistrés dans l'événement à 'feu', (se faire appeler).

De la source, qu'est-ce que les émetteurs d'événements?

Considérons une fonction de rappel –

 function test(int a, function(){ console.log("I am call-back function"); }){ console.log("I am a parent function"); } 

Maintenant, chaque fois que la fonction parent est appelée sur un événement (un clic de bouton ou une connexion, etc.), il exécute d'abord son code, puis le contrôle est transmis à la fonction de rappel. Maintenant, un émetteur d'événement est un objet / méthode qui déclenche un événement dès qu'une action a lieu afin de passer le cntrol à la fonction parent. For-example- Server est un émetteur d'événement dans la programmation Node.Js. Il émet un événement d'erreur dès que le serveur rencontre une erreur qui passe le contrôle à la fonction parent d'erreur. Le serveur émet un événement de connexion dès qu'un socket est connecté au serveur, cet événement déclenche la fonction parent de getConnections, qui prend également une fonction de rappel comme argument. Donc, c'est en effet une chaîne déclenchée comme quelque chose arrive par un émetteur d'événement qui émet un événement pour démarrer une fonction en cours d'exécution.