Как использовать функцию, если мне нужно определить ее позже? - PullRequest
0 голосов
/ 12 апреля 2020

Итак, я использую node.js, express и серийный порт. Что мне нужно сделать, это позволить пользователю выбрать последовательный порт, который прослушивает, инициализировать его с помощью запроса AJAX и, надеюсь, получить некоторые данные из последовательного порта. Но я не могу инициализировать объект SerialPort где-то в середине кода, потому что начинается дождь с ошибками «не определено». Итак, мой код должен выглядеть так:

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

И так далее. Даже когда я пытаюсь объявить tty ранее в коде, перед submitPort , он выдает кучу ошибок о том, что он не определен. И я понимаю эту логику c - я не инициализировал этот объект раньше, так как я мог это сделать? Но это также не сработало, я имею в виду, я пытался сделать это так:

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

Итак, я потерян. Мне действительно нужно связать сеть и сериал вместе, однако, это склеивает довольно сильно. Что я должен сделать, чтобы заставить его работать?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Вам нужно lazy init и singleton, тогда можно использовать это решение.

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
  })
}
0 голосов
/ 12 апреля 2020

Вы можете сделать что-то вроде этого.

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-клиента. Теперь вы уверены, что ваш экземпляр инициализирован перед использованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...