我遇到了一个问题,即我尝试使用的基于承诺的代码并不是每次都得到完整的响应。我将数据侦听器与 .on 一起使用,但将其更改为 .once,因为测试显示我在每次调用时都在堆叠数据侦听器。但无论哪种方式,我偶尔都会得到部分回应。那么我该如何解决这个问题。不是堆栈侦听器,而是每次都获得完整的响应......并使用承诺来完成。
sendPort: function(port, src) {
return new Promise((resolve, reject) => {
// .once, not stacking but sometimes incomplete responses, .on stacking listener
port.once('data', (data) => {
resolve(data); // TODO parse data here or maybe after return
});
port.once('error', (err) => {
reject(err);
});
// have same debug in .then after call showing listerner not removed with .on
Debug.L1('sendport num data listeners: ', port.listenerCount("data"));
port.write(src);
});
这是调用代码
com.openPort(port).then(port => {
_.pTimeout(3000, com.sendPort(port, NCD.gen(args.cmd)))
.then(received => {
console.log('complete response: ', NCD.parse(received));
Debug.L1('resolved num data listeners: ', port.listenerCount("data"));
})
})
.catch(function(e) {
console.log('error: ', e)
});
这是使用 .on 输出的 4 次完整响应应该是[ 170, 1, 0, 171 ]
debug:1 api command array: +0ms [ 170, 3, 254, 175, 0, 90 ]
debug:1 sendport num data listeners: +1ms 4
complete response: [ 170 ]
debug:1 resolved num data listeners: +2ms 4
另一次响应是 [170, 1, 0],大多数时候我得到完整的响应。
.once 的结果相似,但监听器没有堆叠。
debug:1 sendport num data listeners: +0ms 1
complete response: [ 170, 1, 0 ]
debug:1 resolved num data listeners: +1ms 0
想法?想法?关于修复但使用承诺。
我的代码来自我在这里找到的想法。 nodejs映射串口写入接收数据