Передать функцию обратного вызова в module.exports? - PullRequest
0 голосов
/ 09 июля 2019

Я написал код обнаружения USB с экспортом модуля, и я хотел бы также отправить функцию обратного вызова при возникновении события.

Здесь:

module.exports = class USBDetection {
  constructor() {
    this.usb = require('usb');
    this.usbDetect = require('usb-detection');
  }

  startMonitoringDevices() {
    this.usbDetect.startMonitoring();
    // Detect add/insert
    this.usbDetect.on('add', function(device) {
      callback('add', device);
    });
    this.usbDetect.on('add:vid', function(device) {
      callback('add', device);
    });
    this.usbDetect.on('add:vid:pid', function(device) {
      callback('add', device);
    });

  }
};

Как можноЯ передаю callback в модуль?

Ответы [ 2 ]

1 голос
/ 09 июля 2019
module.exports = callback => {
    const usb       = require('usb');
    const usbDetect = require('usb-detection');

    return {
        usb,
        usbDetect,
        startMonitoringDevices: () => {
            // Detect add/insert
            usbDetect.on('add', function(device) {
                callback('add', device);
            });
            ...
            usbDetect.startMonitoring();
        },
    };
};
1 голос
/ 09 июля 2019

Итак, в вашем модуле:

  startMonitoringDevices(options = {}) {
    this.usbDetect.startMonitoring();
    // Detect add/insert
    this.usbDetect.on('add', function(device) {
      if (options.add !== undefined) {
          options.add('add', device);
      }
    });
    this.usbDetect.on('add:vid', function(device) {
      if (options.add !== undefined) {
          options.add('add', device);
      }
    });
    this.usbDetect.on('add:vid:pid', function(device) {
      if (options.add !== undefined) {
          options.add('add', device);
      }
    });
  }

У вашего абонента

const usbDetect = new USBDetection();

usbDetect.startMonitoringDevices({
     add: function(eventType, device){
          console.log('it does its job');
     }
});
...