2017-04-10 44 views
0

在Node.js的对,我们有标准的事件发射器:的Node.js - 听时听众注册

const EE = require('events'); 

const ee = new EE(); 

ee.on('x', function(){ 

}); 

什么,我想要做的,就是听一听当一个客户端注册的监听器。目的是如果排放者处于特定状态,它将在注册时采取行动。

要清楚,在调用ee.on()时,对于特定事件'x',我想采取一些行动。

如何在不修补Node.js中的所有事件发射器的情况下执行此操作?

如果我做了以下工作,我修补了原型方法或实例方法吗?

let on = ee.on; 

ee.on = function(){ 
    if(ee.y === true){ 
     process.next(function(){ 
     ee.emit('done'); 
     }); 
    } 
    return on.apply(ee, arguments); 
}; 

这当然是一样的:

let on = ee.on; 

    ee.on = function(){ 
     if(this.y === true){ 
      process.next(() => { 
      this.emit('done'); 
      }); 
     } 
     return on.apply(this, arguments); 
    }; 

我认为这会工作,但我不知道。我认为这将只影响这一个特定事件发射器,不是所有的事件发射器,因为它不会改变原型...

回答

1

要复制相同的行为,应该从所有其他实例继承的位置创建一个新的类/原型。

编辑:

<file_my_class.js>: 
var Util = require('util'); 
const EventEmmiter = require('events'); 

// private data goes here 
... 

// public data follows 
module.exports = MyClass; 

function MyClass() { 
... 
} 

Util.inherits (MyClass, EventEmmiter); 

MyClass.prototype.mymethod = function() { 
    someobj.on('somevent',() => { 
     ... 
     if (test_condition_ok) { 
      this.emit ('myeventname'); 
     } 
    }); 
} 

<main.js>: 

var MyClass = require('./file_my_class.js'); 
var myclass_instance = new MyClass(); 

myclass_instance.mymethod(); 

myclass_instance.on('myeventname',() => { 
     // Do Something 
    }); 
+0

谢谢,您能不能告诉与代码的例子吗? –

+0

@AlexanderMills检查上面的编辑。清除还是需要更多输入? –

4

您可以侦听newListener事件:

的EventEmitter实例将发射在侦听器添加到其内部侦听器数组之前,它自己的'newListener'事件。

参见EventEmitter.newListener