I'm having an issue which is the promise based code I am trying to use is not every time getting back the complete response. I was using the data listener with .on, but changed it to .once because testing revealed I was stacking data listeners with each call. But either way I occasionally get partial responses. So how can I fix this. Not stack listeners, but get the complete response every time...and do it using a promise.
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);
});
Here is calling code
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)
});
here is output using .on called 4 times the complete response should have been [ 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
another time the response was [ 170, 1, 0 ], most times I get the complete response back.
results are similar for .once but listener is not stacked.
debug:1 sendport num data listeners: +0ms 1
complete response: [ 170, 1, 0 ]
debug:1 resolved num data listeners: +1ms 0
Thoughts? Ideas? about a fix but using promises.
My code comes from ideas I found here. Nodejs map serial port write to receive data