eventEmitter侦听器和具有不同参数的发射器

我们可以有一个发射器的多个监听器,每个工作在不同数量的参数上?

让事件发射器是这样的:

evetE.emit('pre', global, file, self); corresponding event listeners: //Listener 1 m.eventE.on('pre', function() { //TODO }) //Listener 2 eventE.on('pre', function(context, file, m){ console.log(context.ans); }); //Listener 3 eventE.on('pre', function(context){ console.log(context.ans); }); //Listener 4 this.eventE.on('pre',function (context) {}) 

如果以上是真的,那么哪个参数传给哪个监听器呢?

事件监听器只是普通的JS函数。 所以你可以传递任意数量的参数,但函数只能访问你在函数定义中声明的那些参数

 var EE = require('events').EventEmitter; var ee = new EE(); ee.on('test', function (first, second, third) { console.log(first, second, third); //Will output full phrase }); ee.on('test', function (first) { console.log(first); //Will output just first word }); ee.on('test', function () { console.log.apply(console, arguments); //Will output full phrase again }); ee.emit('test', 'Hello', 'my', 'world!'); 

其实你可以看到所有提供的参数总是传递给每个函数。 但是如果你没有在函数声明中定义参数名称,你将无法直接访问这个参数。 但是你可以在每个函数中使用魔法“参数”对象来访问所有提供的参数。 当然,按照它们传递给EE的顺序提供给函数的参数。

EventEmitter似乎使用apply方法调用所有侦听器。 因此,每个侦听器可以期望以传递给emit函数的相同顺序接收参数。 以下代码演示了无参数侦听器仍然接收到该函数的所有参数。

 var EventEmitter = require('events').EventEmitter; var ee = new EventEmitter(); ee.on('myEvent', function() { console.log('no arguments'); console.log(arguments); // Outputs: { '0': 'arg 1', '1': 'arg 2' } }); ee.on('myEvent', function(arg1, arg2) { console.log('with arguments'); console.log(arg1); console.log(arg2); }); ee.emit('myEvent', 'arg 1', 'arg 2');