【问题标题】:Pass Callback function to module.exports?将回调函数传递给 module.exports?
【发布时间】:2019-07-09 14:18:30
【问题描述】:

我已经编写了一个带有模块导出的 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 传递给模块?

【问题讨论】:

    标签: javascript node.js dom-events serverside-javascript


    【解决方案1】:
    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();
            },
        };
    };
    

    【讨论】:

    • 模块名称在哪里? startMonitoringDevices ?
    • 啊,很抱歉 - 我刚刚修复了它,所以返回的对象公开了该功能。您可以为模块命名任何您喜欢的名称,例如const foo = callback => {...}; module.exports = foo;
    • 您也可以将callback 传递给该函数,而不是“构造函数”
    【解决方案2】:

    所以在你的模块中:

      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');
         }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      相关资源
      最近更新 更多