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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29861608/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 18:40:37  来源:igfitidea点击:

What is the difference between addListener(event, listener) and on(event, listener) method in node.js?

node.js

提问by Rahul Kumar

Here i cannot understand what is the basic difference between these two methods.

在这里我无法理解这两种方法之间的基本区别是什么。

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');

回答by jfriend00

.on()is exactly the same as .addListener()in the EventEmitter object.

.on()是完全一样.addListener()的EventEmitter对象。

Straight from the EventEmitter source code:

直接来自EventEmitter 源代码

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

Sleuthing through the GitHub repository, there is this checkinfrom Jul 3, 2010 that contains the comment: "Experimental: 'on' as alias to 'addListener'".

通过 GitHub 存储库进行侦查,2010 年 7 月 3 日有此签入,其中包含评论:“实验性:'on' 作为 'addListener' 的别名”



Update in 2017:The documentation for EventEmitter.prototype.addListener()now says this:

2017 年更新:现在的文档是这样EventEmitter.prototype.addListener()说的:

Alias for emitter.on(eventName, listener).

的别名emitter.on(eventName, listener)

回答by user4013241

Yes you can use "removeListener" with with a listener created with "on". Try it.

是的,您可以将“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.");

回答by user4013241

Added in: v10.0.0

加入: v10.0.0

emitter.off(eventName, listener)

Alias for emitter.removeListener()

别名 emitter.removeListener()

回答by Shahrouz

Their functionalities are exactly the same, however, they can be used in different ways to make your code efficient. Lets assume you created a server and you create a listener, by using ".addListener(event, listener)", for every user that connects to your server. Now as soon as a user is disconnected, you can remove that listener by using the command "removeListener", but you cannot remove the ".on(event, listener)" command. So, you can use these two commands for different situations.

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