Почему моя функция сработала после двойного щелчка? - PullRequest
0 голосов
/ 05 августа 2020

Я создаю функцию, которая перечисляет последовательный порт и сохраняет его в массиве Js. Когда я нажимаю эту функцию в первый раз, в массиве просто отображается список последовательного порта. Все нормально. Когда я снимаю последовательный порт и снова щелкаю по нему, список снова отображается. И я нажимаю его второй раз, он может показать список последовательного порта, который порт снял. Как я могу щелкнуть в первый раз, он может вернуть обновленный список последовательного порта?

В HTML:

  <div id="btn" class="btnSecond" onclick="Function4()">
    <buttom class="noselect" >Function4</buttom>
  </div>

В Js файле:

var serialport = require("serialport");
var arrOfport = [];
var arrOfportBackup = [];


SerialPortCall(); //In the beginning, I call this function first

function SerialPortCall(){
  arrOfport = [];
  arrOfportBackup = [];
  SerialPortReCall();
}

function SerialPortReCall(){
  serialport.list().then(ports => {
    ports.forEach(function(port) {  
      arrOfport.push(port.path);
    });
  });
  arrOfportBackup = arrOfport;
}

Function4 = function(){
  SerialPortReCall();
  alert(arrOfportBackup);
}

Первый результат:

/ dev / tty.AB C, / dev / tty.AB C -WirelessiAPv2, / dev / tty.AB C -WirelessiAP , / dev / tty.Bluetooth-Incoming-Port, / dev / tty.wchusbserial1410, / dev / tty.usbserial-1410

Снимите wchusbserial1410 и снова щелкните функцию 4:

/ dev / tty.AB C, / dev / tty.AB C -WirelessiAPv2, / dev / tty.AB C -WirelessiAP, / dev / tty.Bluetooth-Incoming-Port , / dev / tty.wchusbserial1410, / dev / tty.usbserial-1410

Щелкните еще раз Функция 4:

/ dev / tty.AB C, / dev / tty.AB C -WirelessiAPv2, / dev / tty.AB C -WirelessiAP, / dev / tty.Bluetooth-Incoming-Port

1 Ответ

0 голосов
/ 05 августа 2020

Я удаляю SerialPortRecall () и делаю только одну функцию для вызова. и каждый раз, когда он запускается, необходимо установить массив в пустой массив.

var serialport = require("serialport");
var arrOfport = [];
var arrOfportBackup = [];


SerialPortCall(); //In the beginning, I call this function first

function SerialPortCall() {
  arrOfport = [];
  arrOfportBackup = [];
  serialport.list().then(ports => {
    ports.forEach(function(port) {
      arrOfport.push(port.path);
    });
  });
  return arrOfport;
}

Function4 = function() {
  arrOfportBackup = SerialPortCall();
  alert(arrOfportBackup);
}
...