我想以有序的方式运行这三个动作:
问题是由于节点js的异步性,有时数据是在端口开始侦听之前发送的。因此,这些数据丢失了。这是我的示例代码。我该如何解决这个问题?
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("COM27", {
baudrate: 57600
}, false); // this is the openImmediately flag [default is true]
//***1***open the serialport
serialPort.open(function (error) {
if ( error ) {
console.log('failed to open: '+error);
}
else {
console.log('open');
}
//***2***port is now listening
serialPort.on('data', function (data) {
console.log('data received: ' + data)
})
//***3***send command using serialport
serialPort.write("AJ+APN?\n", function(err, results) {
console.log('err ' + err);
console.log('results ' + results)
})
});
答案 0 :(得分:0)
我不知道您正在使用的serialport模块,但如果它的行为方式是“标准”:
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("COM27", { baudrate: 57600 }, false);
//***1*** listen for events on port
serialPort.on('data', function (data) {
console.log('data received: ' + data);
//***2*** open the serialport
serialPort.open(function (error) {
if ( error ) {
console.log('failed to open: '+error);
} else {
console.log('open');
//***3*** send command using serialport -> after port opened
serialPort.write("AJ+APN?\n", function(err, results) {
console.log('err ' + err);
console.log('results ' + results)
});
}
});
答案 1 :(得分:0)
为应该在系列中执行的每个任务创建一个承诺。然后它应该按照要求的顺序简单地链接承诺。