node.js中addListener(event,listener)和on(event,listener)方法有什么区别?

时间:2015-04-25 06:00:52

标签: 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');

5 个答案:

答案 0 :(得分:66)

.on()与EventEmitter对象中的.addListener()完全相同。

直接来自EventEmitter source code

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

通过GitHub存储库,从2010年7月3日开始this checkin包含评论: “实验:'on'作为'addListener'的别名” < /强>

2017年更新 documentation for EventEmitter.prototype.addListener()现在说:

  

emitter.on(eventName, listener)的别名。

答案 1 :(得分:1)

它们的功能完全相同,但是,它们可以以不同的方式使用,以使您的代码更有效。让我们假设您创建了一个服务器,并为每个连接到您的服务器的用户使用“.addListener(event,listener)”创建一个监听器。现在,只要用户断开连接,就可以使用命令“removeListener”删除该侦听器,但不能删除“.on(event,listener)”命令。因此,您可以将这两个命令用于不同的情况。

答案 2 :(得分:1)

是的,您可以使用&#34; removeListener&#34;使用&#34; on&#34;创建一个监听器。试试吧。

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

答案 3 :(得分:0)

添加到:v10.0.0

emitter.off(eventName, listener)

emitter.removeListener()的别名

答案 4 :(得分:0)

也可以参考addEventListener vs onclick: Which one should you draft into your fantasy football team?

并且可以通过 event-target-shim 使用 HTML 浏览器之类的事件,正如 @flyskywhy/react-native-browser-polyfill 所做的那样。