2017-10-07 8 views
1

Dans un endroit, nous utilisons eventEmitter pour générer des événements. En fait, c'est la manière très commune.Comment fonctionnent les arguments dans le modèle de publication/abonnement?

eventEmitter.emit('started', data, date); 

Dans l'autre endroit, nous essayons de l'attraper. Tout est assez clair lors de l'utilisation des fonctions de flèche. 'data' et 'date' sont passés à la fonction comme arguments

someInstanse.event.on('started', (data, date) => { 
    //crazy stuff here 
}) 

Mais comment cette notaion fonctionne-t-elle? Nous déterminons 3 args avec émetteur et maintenant nous avons vraiment que la chaîne d'événements et une fonction au lieu

someInstance.event.on('started', function(data, date) { 
}); 

Je suppose que avant d'ajouter des fonctions de direction, il était le seul moyen d'appeler des fonctions anonymes

+0

Ouvert le document Node et lire que la méthode emit passe des arguments aux écouteurs. De même chaque emitter.on (eventName, listener) signifie que l'écouteur est une fonction de rappel. Donc ce n'est pas un problème maintenant. –

+0

Êtes-vous confus par la façon dont les données sont transmises aux fonctions de rappel? ou comment l'eventemitter fonctionne sous le capot? – Chang

+0

Oui, maintenant je sais comment le formuler. Je n'ai aucune idée pourquoi 'emit' invoqué du côté client ne provoque pas' emit' sur le serveur. Selon le modèle de publication/abonnement, chaque émission itère à travers les fonctions des écouteurs et les exécute ou retourne false si le tableau avec des handles n'est pas défini. J'essaie la librairie Socket.IO donc il est seulement possible d'accrocher 'emits' appelé par le serveur lui-même. –

Répondre

1

Ceci est typique publier/abonnement modèle de conception. Et il est vraiment déterminé par la façon dont le emit et comment les abonnés répondent à l'événement sont mis en œuvre sous le capot.

Fondamentalement, dans la fonction de publication, vous voulez appeler toutes les fonctions d'abonné (on), fournies avec les informations avec publish (emit). Voici juste un pseudo-code. J'ai écrit un pub/sous-modèle minifié dans github, si vous voulez jeter un coup d'oeil. Je pense qu'il est extrêmement utile de vous aider à comprendre ce problème. https://github.com/thomasyimgit/pubsub/blob/master/index.js