Javascript Node.js-在注册侦听器时侦听
在Node.js中,我们有标准的事件发射器:Javascript Node.js-在注册侦听器时侦听,javascript,node.js,eventemitter,Javascript,Node.js,Eventemitter,在Node.js中,我们有标准的事件发射器: const EE = require('events'); const ee = new EE(); ee.on('x', function(){ }); 我想做的是,当客户机注册一个侦听器时侦听。这样做的目的是,如果发射器处于特定状态,它将在注册时采取行动 需要说明的是,当调用ee.on()时,对于特定事件“x”,我想采取一些措施 如果不在Node.js中对所有事件发射器进行monkey修补,我如何做到这一点 如果我执行以下操作,我是在修补
const EE = require('events');
const ee = new EE();
ee.on('x', function(){
});
我想做的是,当客户机注册一个侦听器时侦听。这样做的目的是,如果发射器处于特定状态,它将在注册时采取行动
需要说明的是,当调用ee.on()
时,对于特定事件“x”,我想采取一些措施
如果不在Node.js中对所有事件发射器进行monkey修补,我如何做到这一点
如果我执行以下操作,我是在修补原型方法还是实例方法
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);
};
我认为这会奏效,但我不确定。我认为这只会影响一个特定的事件发射器,而不是所有的事件发射器,因为它不会改变原型…您可以监听一个
newListener
事件:
在将侦听器添加到其内部侦听器数组之前,EventEmitter实例将发出自己的“newListener”事件
请参阅。您可以侦听
newListener
事件:
在将侦听器添加到其内部侦听器数组之前,EventEmitter实例将发出自己的“newListener”事件
请参阅。要复制相同的行为,您应该创建一个新的类/原型,所有其他实例都将从中继承 编辑:
:
var Util=require('Util');
const EventEmmiter=require('events');
//这里有私人数据
...
//公共数据如下
module.exports=MyClass;
函数MyClass(){
...
}
Util.inherits(MyClass,EventEmmiter);
MyClass.prototype.mymethod=函数(){
someobj.on('somevent',()=>{
...
如果(测试条件正常){
this.emit('myeventname');
}
});
}
:
var MyClass=require('./file_my_class.js');
var myclass_instance=new myclass();
myclass_实例。mymethod();
myclass_instance.on('myeventname',()=>{
//做点什么
});
要复制相同的行为,您应该创建一个新的类/原型,所有其他实例都将从中继承
编辑:
:
var Util=require('Util');
const EventEmmiter=require('events');
//这里有私人数据
...
//公共数据如下
module.exports=MyClass;
函数MyClass(){
...
}
Util.inherits(MyClass,EventEmmiter);
MyClass.prototype.mymethod=函数(){
someobj.on('somevent',()=>{
...
如果(测试条件正常){
this.emit('myeventname');
}
});
}
:
var MyClass=require('./file_my_class.js');
var myclass_instance=new myclass();
myclass_实例。mymethod();
myclass_instance.on('myeventname',()=>{
//做点什么
});
@AlexanderMills检查上面的编辑。清除或需要更多输入?@AlexanderMills检查上面的编辑。清除或需要更多输入?
<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
});