Подтвердить что ты не робот

В чем разница между методом addListener (event, listenener) и on (event, listenener) в 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');
4b9b3361

Ответ 1

.on() точно такой же, как .addListener() в объекте EventEmitter.

Прямо из Исходный код EventEmitter:

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

Скрываясь через репозиторий GitHub, эта регистрация от 3 июля 2010 года содержит комментарий: "Экспериментальный: 'on' как псевдоним" addListener".


Обновление в 2017 году: Документация для EventEmitter.prototype.addListener() теперь говорит следующее:

Псевдоним для emitter.on(eventName, listener).

Ответ 2

Их функциональные возможности абсолютно одинаковы, однако их можно использовать по-разному, чтобы сделать ваш код эффективным. Предположим, вы создали сервер, и вы создаете прослушиватель, используя ".addListener(event, listener)" для каждого пользователя, который подключается к вашему серверу. Теперь, как только пользователь отключится, вы можете удалить этот прослушиватель, используя команду "removeListener", но вы не можете удалить команду ".on(event, listener)". Таким образом, вы можете использовать эти две команды для разных ситуаций.

Ответ 3

Да, вы можете использовать "removeListener" вместе со слушателем, созданным с помощью "on". Попробуй.

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.");

Ответ 4

Добавлено в: v10.0.0

emitter.off(eventName, listener)

Псевдоним для emitter.removeListener()