如果我需要稍后定义它,我该如何使用函数?

How do i use function if i need to define it later?

因此,我正在使用 node.js、express 和串行端口。我需要做的是让用户选择监听的串行端口,使用 AJAX 请求对其进行初始化,并希望从串行端口获取一些数据。 但是我实际上无法在代码中间的某处初始化 SerialPort 对象,因为它开始下雨并出现 "is not defined" 错误。所以,我的代码应该是这样的:

//some definitions here...
app.post('/submitPort', (req, res) => {
    tty = new SerialPort(req.body.portpath)
})
tty.on('data', () => {...})

等等。即使我试图在代码的前面声明 tty,在 submitPort 之前,它也会抛出一堆关于它未定义的错误。 我理解这个逻辑——我之前没有初始化那个对象,那么,我该怎么做呢?但这也没有用,我的意思是,我试着这样做:

let tty = new SerialPort()
//some logic
app.post('/submitPort', (req, res) => {
     tty = new SerialPort(req.body.portpath)
})

所以,我现在迷路了。我 真的 需要将网络和串行绑定在一起,但是,它很难粘合。我应该怎么做才能让它发挥作用?

你可以这样做。

let tty = undefined;

// Your business logic...

app.post('/submit-port', (req, res) => {
   tty = new SerialPort(req.body.portpath);
   tty.on('data', () => { /*  TODO: implement the handler */ });
});

您可以考虑将端点作为您的 tty 客户端的 "initializer"。现在您确定您的实例在使用前已初始化。

你需要lazy initsingleton,那么可以使用这个解决方案。

const tty;
//some definitions here...
app.post('/submitPort', (req, res) => {
  if(!tty){
    initTTY(req.body.portpath)
  } // not define init
  res.send("DONE")
})
function initTTY(port) {
  tty = new SerialPort(port)
  tty.on('data', () => {
    // Do something here
  })
  tty.on('error', () => {
    tty = null; // so that can initialized
  })
}