web-dev-qa-db-fra.com

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

En parcourant http://microjs.com , je vois beaucoup de bibliothèques intitulées "émetteurs d'événements". J'aime penser que je connais assez bien les bases du langage javascript, mais je n'ai vraiment aucune idée de ce qu'est un "émetteur d'événement".

Quelqu'un veut-il m'éclairer? Ça semble intéressant...

68
wwaawaw

Cela déclenche un événement auquel tout le monde peut écouter. Différentes bibliothèques offrent différentes implémentations et à différentes fins, mais l’idée de base est de fournir un cadre pour la publication 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 pouvez pas émettre d'événements à partir d'un objet arbitraire. C'est là que l'événement-émetteur devient utile. Voici un pseudo-code pour la démonstration d'événements personnalisés (exactement 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");
55
niaher

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 doit être appelé) plusieurs fois ou vous pouvez choisir de n'écouter que 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 toutes les fonctionnalités de base d'un EventEmitter. La méthode on or addListener (Essentiellement la méthode de l'abonnement) vous permet de choisir l'événement à surveiller et le rappel à appeler. La méthode emit (la méthode de publication), quant à elle, vous permet d '"émettre" un événement, ce qui provoque le déclenchement de tous les rappels enregistrés pour cet événement.

De la source Que sont les émetteurs d'événements?

20
Rahul Tripathi

exemple simple dans node.js:

    var EventEmitter = require('events').EventEmitter;
    var concert = new EventEmitter;
    var singer = 'Coldplay';

    concert.on('start', function (singer) {
        console.log(`OMG ${singer}!`);
    });

    concert.on('finish', function () {
        console.log(`It was the best concert in my life...`);
    });

    concert.emit('start', singer);
    concert.emit('finish');
4
Eldiyar Talantbek

Envisager une fonction de rappel

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

Désormais, chaque fois que la fonction parent est appelée lors d'un événement (clic d'un bouton, connexion, etc.), elle exécute d'abord son code, puis le contrôle est passé à la fonction de rappel. Maintenant, un émetteur d'événements est un objet/une méthode qui déclenche un événement dès qu'une action est effectuée afin de transmettre le contrôle de la chaîne de contrôle à la fonction parent. Par exemple, Server est un émetteur d'événements dans la programmation de 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'une socket est connectée au serveur. Cet événement déclenche ensuite la fonction parent de getConnections, qui prend en effet également une fonction de rappel en argument. Il s’agit donc bien d’une chaîne déclenchée par l’émetteur d’événement qui émet un événement pour lancer une fonction.

1
Vinayak Trivedi