Node.js 将事件传播到nodejs中的母类
在nodejs中,我有一个main来创建一些将发出事件的对象。 其中之一是将监听gpio的数字输入 这个类看起来像这样:Node.js 将事件传播到nodejs中的母类,node.js,events,Node.js,Events,在nodejs中,我有一个main来创建一些将发出事件的对象。 其中之一是将监听gpio的数字输入 这个类看起来像这样: class dInput { constructor(port, _id, _name, _messageBus) { this.gpio = new Gpio(port, { mode: Gpio.INPUT, pullUpDown: Gpio.PUD_DOWN, edge: Gpio.EITHER_EDGE
class dInput
{
constructor(port, _id, _name, _messageBus)
{
this.gpio = new Gpio(port, {
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_DOWN,
edge: Gpio.EITHER_EDGE
});
this.ID = _id;
this.Name = _name;
this.messageBus = _messageBus;
this.gpio.on('interrupt', function(level){
var details = {
ID: this.ID,
level: level,
name: this.Name
};
DigitalInputsController.ReportChange(details);
});
console.log("created");
}
}
messageBus i avar messageBus=new events.EventEmitter()代码>是我在main中创建的,并且在创建时传递给digitalInput
当gpio的值发生变化时,事件链会正确启动,但是什么呢
以下是我在主会场的聆听方式:
messageBus.on("dInputChanged", function(data){
console.log(data);
socket.emit("ButtonStateChanged", data);
});
我收到的主要级别是:
{ ID: undefined, level: 0, name: undefined }
有什么线索吗 调用事件处理程序的上下文(this
)是EventEmitter
实例本身
在这种特殊情况下,在this.gpio
上的'interrupt'
事件处理程序中,上下文将是this.gpio
。要改为引用dInput
实例,您需要使用箭头函数覆盖此
并将其设置为当前上下文:
this.gpio.on('interrupt', (level) => {
var details = {
ID: this.ID,
level: level,
name: this.Name
};
DigitalInputsController.ReportChange(details);
});
或者您需要添加一个var self=this在事件处理程序外部使用code>,并在事件处理程序中使用self.ID
、self.Name
等
您也可以使用eventHandler.bind()
在事件处理程序中重写此
,但这只是node的最新版本(例如v7.0.0+)中的一个快速操作。调用事件处理程序的上下文(此
)是事件发射器
实例本身
在这种特殊情况下,在this.gpio
上的'interrupt'
事件处理程序中,上下文将是this.gpio
。要改为引用dInput
实例,您需要使用箭头函数覆盖此
并将其设置为当前上下文:
this.gpio.on('interrupt', (level) => {
var details = {
ID: this.ID,
level: level,
name: this.Name
};
DigitalInputsController.ReportChange(details);
});
或者您需要添加一个var self=this在事件处理程序外部使用code>,并在事件处理程序中使用self.ID
、self.Name
等
您还可以使用eventHandler.bind()
在事件处理程序中重写此
,但这只是node的最新版本(例如v7.0.0+)中的一个快速操作