使用 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/