如何解决如何从事件监听器退出父函数?
我正在用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 举报,一经查实,本站将立刻删除。