问题描述
我正在用NodeJS编写一个程序,该程序将与我的arduino通信。我正在使用serialport库。我已经编写了从端口发送和接收数据的功能。
有一点背景知识,我已经创建了命令类型,并且在收到每个命令后都会发送一个确认。下面是我的receiveCommand函数。
export const receiveCommand = (connection: any,command: any) => {
const resData: any = [];
return new Promise((resolve) => {
const eListener = (packet: any) => {
// console.log(packet)
const data = xmodemDecode(packet);
data.forEach((d) => {
const { commandType,currentPacketNumber,totalPacket,dataChunk } = d;
if (commandType === command) {
resData[currentPacketNumber - 1] = dataChunk;
const ackPacket = ackData(
ACK_PACKET,`0x${currentPacketNumber.toString(16)}`
);
connection.write(Buffer.from(`aa${ackPacket}`,'hex'));
if (currentPacketNumber === totalPacket) {
resolve(resData.join(''));
connection.removeListener('data',eListener);
}
}
});
};
connection.on('data',eListener);
});
};
现在,我用于给定任务的代码是这样的。
export const doTask = async (params) => {
const { connection } = await createPort();
connection.open();
connection.on('close',(err)=>{
if(err){
console.log("error here");
console.log(err);
}
return;
})
console.log(`Desktop : Sending Data .`);
let commandNumber = 12
let data = "abcd"
await sendData(connection,commandNumber,data);
commandNumber = 13
const dataRec = await receiveCommand(connection,commandNumber)
...
...
...
...
connection.close();
};
console.log("task starting");
await doTask();
console.log("task finished");
我的输出停止在connection.on('close')的回调中打印的错误处。它没有到达任务完成的最后一个console.log语句。我想了解如何从事件监听器正常退出函数doTask。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)