2015-04-25 11 views
34

Qui non riesco a capire qual è la differenza fondamentale tra questi due metodi.Qual è la differenza tra addListener (evento, listener) e il metodo (event, listener) in node.js?

var events = require('events'); 
var eventEmitter = new events.EventEmitter(); 



var listner1 = function listner1() { 
    console.log('listner1 executed.'); 
} 

var listner2 = function listner2() { 
    console.log('listner2 executed.');  
} 

eventEmitter.addListener('connection', listner1); 

eventEmitter.on('connection', listner2); 

eventEmitter.emit('connection'); 
+0

possibile duplicato del [In Node.js, ciò che è "on"?] (Http://stackoverflow.com/questions/8281979/in-node-js-whats-on) – Urban

+1

su (evento, ascoltatore Aggiunge un listener alla fine dell'array listener per l'evento specificato. Non vengono effettuati controlli per verificare se l'ascoltatore è già stato aggiunto. Più chiamate che passano la stessa combinazione di evento e listener comporteranno l'aggiunta del listener più volte. Restituisce emettitore, quindi le chiamate possono essere concatenate. –

risposta

49

.on() è esattamente lo stesso come .addListener() nell'oggetto EventEmitter.

Direttamente dal EventEmitter source code:

EventEmitter.prototype.on = EventEmitter.prototype.addListener; 

Sleuthing attraverso il repository GitHub, c'è this checkin dal 3 Luglio 2010 che contiene il commento: "sperimentale: 'on' come alias per 'addListener'".


Aggiornamento nel 2017: Il documentation for EventEmitter.prototype.addListener() dice ora questo:

Alias ​​per emitter.on(eventName, listener).

+1

Quindi perché vengono utilizzati due metodi diversi? Deve esserci qualche logica dietro. –

+3

@RahulKumar - Sto indovinando qui, ma suppongo che '.addListener()' sia probabilmente l'originale e '.on()' è stato aggiunto come scorciatoia (simile a jQuery) - solo meno digitando e preferito da alcuni . – jfriend00

+5

@RahulKumar - Ho trovato il check-in esatto che ha aggiunto '.on()' e il commento di controllo corrispondente - aggiunto alla mia risposta sopra. L'unica cosa che mi sorprende è che '.off()' non è lì come alias per 'removeListener()'. – jfriend00

0

Le loro funzionalità sono esattamente le stesse, tuttavia, possono essere utilizzate in diversi modi per rendere efficiente il codice. Supponiamo che tu abbia creato un server e tu crei un listener, usando ".addListener (event, listener)", per ogni utente che si connette al tuo server. Ora, non appena un utente viene disconnesso, è possibile rimuovere quel listener usando il comando "removeListener", ma non è possibile rimuovere il comando ".on (event, listener)". Quindi, puoi usare questi due comandi per diverse situazioni.

+1

questo è falso, gli eventi aggiunti con 'on' possono essere rimossi con' removeListener' esattamente come eventi aggiunti con 'addListener',' on' è semplicemente un modo più veloce di digitare 'addListener' – Geronimo

+0

addListener è più completo in questo contesto . aggiungi annullato per essere rimosso quindi ha senso essere coerenti in questo contesto. –

1

Sì, è possibile utilizzare "removeListener" con un listener creato con "on". Provalo.

var events = require('events'); 
var eventEmitter = new events.EventEmitter(); 

// listener #1 
var listner1 = function listner1() { 
    console.log('listner1 executed.'); 
} 

// listener #2 
var listner2 = function listner2() { 
    console.log('listner2 executed.'); 
} 

// Bind the connection event with the listner1 function 
eventEmitter.addListener('connection', listner1); 

// Bind the connection event with the listner2 function 
eventEmitter.on('connection', listner2); 

var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); 
console.log(eventListeners + " Listner(s) listening to connection event"); 

// Fire the connection event 
eventEmitter.emit('connection'); 

// Remove the binding of listner1 function 
eventEmitter.removeListener('connection', listner2); 
console.log("Listner2 will not listen now."); 

// Fire the connection event 
eventEmitter.emit('connection'); 

eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); 
console.log(eventListeners + " Listner(s) listening to connection event"); 

console.log("Program Ended."); 
Problemi correlati