0

我正在使用 Johnny-Five 与被动红外探测器和 CHIP Linux 单板计算机一起工作。一般来说,一切都很好。

但是假设我已经定义了一个 pin 和一个按钮,如下所示:

let button = new five.Button({
  pin: 'XIO-P0'
});

let pir = new five.Pin({
  pin: 'PWM0',
  type: 'digital',
  mode: 0
});

在某个时候,我决定像这样收听阅读事件和按钮按下:

button.on('press', function() {
  console.log('Button pressed');
});

pir.read(function (error, value) {
  if (error) {
    console.log('Error:', error);
  } else {
    console.log('Pin:', value);
  }
});

我如何告诉约翰尼五号我不想再听那个事件了?在我的一生中,我无法在文档或谷歌的任何地方找到它。

任何帮助,将不胜感激。

4

1 回答 1

1

所以事实证明 Button 扩展了 Node.js EventEmitter 对象。因此,您可以使用与它关联的removeListener()removeAllListeners()方法。但它似乎要求您将回调定义为非匿名函数,以便您可以引用它们进行删除。

button.on('press', buttonPressCallback);

function buttonPressCallback() {
  console.log('Button pressed');
}

Pin.read()函数的工作方式不同,因此如果您希望能够以相同的方式将其杀死,则需要使用 Pin 的事件接口。有highlowdata事件。数据进行所有更改。

pir.on('high', pinHighCallback);

pir.on('low', pinLowCallback);

function pinHighCallback() {
  console.log('Pin: HIGH');
}

function PinLowCallback() {
  console.log('Pin: LOW');
}

所以现在要删除这些监听器,我们只需调用以下代码:

button.removeListener('press', buttonPressCallback);
pin.removeListener('high', pinHighCallback);
pin.removeListener('low', pinLowCallback);
于 2017-03-10T17:37:49.253 回答