如何在闭包之外调用方法

时间:2015-12-01 17:33:30

标签: javascript node.js events

我正在尝试使用NodeJS模块“pcsc-lite”与读卡器进行通信。如果您想查看模块:https://github.com/santigimeno/node-pcsclite

我正在寻找一种使用我自己的方法将一系列数据发送到我的阅读器的方法。因为,该模块是基于事件的。所以我必须声明两个侦听器(一个在另一个中)才能调用send方法。

例如:

module.on("reader", function(reader){
    //...
    reader.on("status", function(status){
         //...
         reader.connect({ share_mode : this.SCARD_SHARE_SHARED },function(err, protocol) {

              //This is the method I want to be able to call "when I need it"
              reader.transmit(...);
         });
    });
});

我想像这样调用传输方法:

function send(...){
     reader.transmit(...);
}

我认为有一种方法可以做到这一点,但我似乎有点迷上我的C / Java编程习惯。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您的读者是单身人士,您可以在回调之外宣布它,然后在准备好时分配变量。不知道更多,这是一个简单的例子:

let reader; // we prepare a variable that's outside of scope of it all.
// your `send` function
function send(params) {

    let stuff = doStuffWithParams(params);
    reader.transmit(stuff, callback);
}

// we take out init stuff too
function initialize() {

  // we know reader variable is already initialized.
  reader.on('status', function() { 
    reader.connect({
      share_mode : this.SCARD_SHARE_SHARED
    },function(err, protocol) {

      // send.
      send();
      // or even better, emit some event or call some callback from here, to let somebody outside this module know you're ready, then they can call your `send` method.
    });
  });
}    

// now your module init section
let pcsc = require('pcsclite')();
pcsc.on('reader', function(r) {

  // assign it to our global reader
  reader = r;
  initialize();
});

注意:不要调用变量module,它指的是当前正在执行的文件,您可能会遇到意外行为。