node.js - 在 node.js 中使用串行端口进行异步/等待

标签 node.js serial-port

使用 Node.js 处理 PC 和基于 Arduino 的硬件之间的通信。最后一个设备是用 G 代码实现的,所以如果我发送“G0”,我将收到两行;一个用于确认已收到指令,第二个用于确认数据。

我想使用 async/await 但出了点问题……代码如下:

'use strict'
const SerialPort = require('serialport')
const Readline = SerialPort.parsers.Readline

const cardPort = new SerialPort('COM6', {
    baudRate: 115200,
    parity: 'none',
    stopBits: 1,
    dataBits: 8,
    flowControl: false,
    usePromises: true,
}, function(err) {
    if (err){
        console.log('error: ', err.message)
        port.close()
    } else {

    }
})

const cardParser = new Readline({ delimiter: '\r\n' })

cardPort.pipe(cardParser)

function checkCard(port, parser){
    port.write('G0\n', function () {
        console.log('message written')
        parser.on('data', (data) => { 
            console.log(data)
            return (data)
        })
    })
}

async function run () {
    const id = await checkCard(cardPort,cardParser)
    console.log(`ID response is: ${id}`)
}

run()

这是我得到的回应:
ID response is: undefined
message written
Received: G0
ENCR1PT3R!

为什么 ID 响应不等到 checkCard 执行?

提前致谢

最佳答案

checkCard应该返回 Promise工作,但看起来像 port.write是基于回调的。将其附在 new Promise 中因为它工作。

function checkCard(port, parser){
    return new Promise(function(resolve, reject) { 
      port.write('G0\n', function () {
        console.log('message written')
        parser.on('data', (data) => { 
            console.log(data)
            resolve(data)
        })
      })
    });      
}

关于node.js - 在 node.js 中使用串行端口进行异步/等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50857586/

相关文章:

python - 如何让 python 脚本监听来自另一个脚本的输入

python - PySerial - 全双工通信

java - yarn 安装和构建消耗 100% CPU 和内存 95%

java - RXTX 串行连接 - 阻塞 read() 的问题

javascript - 为什么我的回调函数总是返回错误而不是响应

node.js - NodeJS:发现错误:听 EADDRINUSE:::3000?

c - 打开并配置串口

python - 如何将输入视为生成器

node.js - 如何在 Node-Red 中将 Int 转换为十进制?

javascript - NodeJS 请求 mysql DB 以异步方式返回值