Node.js - 监听器何时注册
Node.js - Listen for when listeners are registered
在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);
};
我认为这会奏效,但我不确定。我认为这只会影响这个特定的事件发射器,而不是所有事件发射器,因为它不会改变原型...
您可以侦听 newListener
事件:
The EventEmitter instance will emit its own 'newListener' event before a listener is added to its internal array of listeners.
要复制相同的行为,您应该创建一个新的 class/prototype,所有其他实例将从那里继承。
编辑:
<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
});
在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);
};
我认为这会奏效,但我不确定。我认为这只会影响这个特定的事件发射器,而不是所有事件发射器,因为它不会改变原型...
您可以侦听 newListener
事件:
The EventEmitter instance will emit its own 'newListener' event before a listener is added to its internal array of listeners.
要复制相同的行为,您应该创建一个新的 class/prototype,所有其他实例将从那里继承。
编辑:
<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
});