diff --git a/lib/receiveData.js b/lib/receiveData.js index e271d25..40cb152 100644 --- a/lib/receiveData.js +++ b/lib/receiveData.js @@ -35,7 +35,7 @@ module.exports = function (stream, timeout, responseLength, callback) { } // VALIDATE TERMINAL BYTE? stream.removeListener('data', handleChunk); - callback(err, buffer); + return callback(err, buffer); }; if (timeout && timeout > 0) { timeoutId = setTimeout(function () { @@ -44,4 +44,5 @@ module.exports = function (stream, timeout, responseLength, callback) { }, timeout); } stream.on('data', handleChunk); + return finished; }; diff --git a/lib/sendCommand.js b/lib/sendCommand.js index 35c5d53..1928690 100644 --- a/lib/sendCommand.js +++ b/lib/sendCommand.js @@ -25,22 +25,23 @@ module.exports = function (stream, opt, callback) { cmd = Buffer.from(cmd.concat(Statics.Sync_CRC_EOP)); } - stream.write(cmd, function (err) { + var finish = receiveData(stream, timeout, responseLength, function (err, data) { if (err) { error = new Error('Sending ' + cmd.toString('hex') + ': ' + err.message); return callback(error); } - receiveData(stream, timeout, responseLength, function (err, data) { - if (err) { - error = new Error('Sending ' + cmd.toString('hex') + ': ' + err.message); - return callback(error); - } - if (responseData && !data.equals(responseData)) { - error = new Error(cmd + ' response mismatch: '+data.toString('hex')+', '+responseData.toString('hex')); - return callback(error); - } - callback(null, data); - }); + if (responseData && !data.equals(responseData)) { + error = new Error(cmd + ' response mismatch: '+data.toString('hex')+', '+responseData.toString('hex')); + return callback(error); + } + callback(null, data); + }); + + stream.write(cmd, function (err) { + if (err) { + error = new Error('Sending ' + cmd.toString('hex') + ': ' + err.message); + return finish(error); + } }); };