首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在node.js中使用串口进行异步/等待

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

Stack Overflow用户
提问于 2018-06-14 20:28:50
回答 1查看 2.7K关注 0票数 3

使用Node.js实现PC机与基于Arduino的硬件之间的通信。最后一个设备是用G-Code实现的,所以如果我发送‘G0’,我会收到两行;一行用来确认指令已经收到,另一行用来发送数据。

我想使用async/await,但有些地方不对劲...代码如下:

代码语言:javascript
复制
'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()

这是我得到的回应:

代码语言:javascript
复制
ID response is: undefined
message written
Received: G0
ENCR1PT3R!

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

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 20:39:43

checkCard应该返回Promise正常工作,但是看起来port.write是基于回调的。将其封装在new Promise中以使其正常工作。

代码语言:javascript
复制
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)
        })
      })
    });      
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50857586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档