打开串行端口并等待 modbus 请求:实现良好?

open serial port and wait for modbus request: good implementation?

我是 nodejs 的新手,对以下内容有点困惑:我有一个模块(下面的 modbuslistener)打开一个串行端口并等待 modbus 数据(基本上是从某个从属地址开始的几个字节) .当数据正确(crc 匹配)时,进程(主)应该成功结束并且这有效。

不完全确定:return p.then(v => {}) 但似乎有效

现在我想做的是在没有数据(超时确实停止进程)或不正确的数据时抛出异常。我似乎无法抛出主程序异常? (添加拒绝意味着我需要抓住它,然后呢?)

非常感谢任何帮助!

(如果下面的代码可以更好...拜托!)

谢谢 坦率

modbuslistener:

const serial = require('serialport')
const interbytetimeoutparser = require('@serialport/parser-inter-byte-timeout')
const crc = require('crc')

module.exports = async function(device) {

  const port = await new serial(device)

  let p = new Promise((resolve, reject) => {

     setTimeout(function() {
       console.log('time is up!')
       resolve()
     }, 30000)

     const parser = port.pipe(new interbytetimeoutparser({
        interval: 30
  }))

  parser.on('data', function(data) {

     // message for us?
     if (data[0] === config.mb.serverid) {

       // correct message?
       if (crc.crc16modbus(data) === 0) {

         console.log('function: ' + data[1])
         console.log('address: ' + (data[2] * 256 + data[3]))
         console.log('value: ' + (data[4] * 256 + data[5]))

         port.close()

         resolve()

       } else {

         console.log('got corrupted data')
       }
     }
   })

 })

 return p.then(v => {})
}

主要内容:

const modbuslistener = require('./edge/modbuslistener')

 (async function() {

   await modbuslistener('/dev/tty.usbserial-AD0JM65Z')

   log('done')

   process.exit(0)
 })()

使用 catch-closure/function 设置您的 Promise 对象,然后异常 thrown 将由该 closure/function.

捕获和处理

话虽如此,但不使用拒绝闭包来捕获错误状态?