节点js中的同步动作

synchronous actions in node js

我想运行这三个动作有序进行:

  1. 打开串口
  2. 倾听任何变化
  3. 正在通过串口发送命令

问题是由于node 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)
  })
});

我不知道您使用的串行端口模块,但如果它的行为方式 "standard" 那么:

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)
    });
  }
});

为每个应该连续执行的任务创建一个承诺。那么它应该是按要求的顺序简单地链接承诺。