1

我已经构建了一个函数,通过包中给出的数组检查端口是否存在SerialPort

端口已连接。当我在函数之外运行代码时,它就可以工作(true当端口被插入时)。当我尝试在一个函数中运行它时,我收到了undefined

function exists(portName) {
    SerialPort.list(function (err, ports) {
        ports.forEach(function (port) {
            console.log(port.comName);
            if (port.comName == portName) {
                return true
            }
        });
    });
}
console.log(exists('COM7'));

结果:

NodeJS service has started.
undefined
COM1
COM7
Port is connected.

完整代码在:https ://github.com/eshk12/SerialPort-HTTP-Server/blob/master/routes/index.js

谢谢!

4

2 回答 2

4

由于端口检查是异步的,您可能需要一个有前途的功能:

 function exists(portName) {
  return new Promise(res => {
    SerialPort.list((err, ports)=>{
        res(ports.some(port => port.comName === portName));
   });
 });
}

或者正如@skirtle 所说,它可以更短:

const exists = portName => SerialPort.list().then(ports => ports.some(port => port.comName === portName ));

所以你可以这样做:

 exists("CM7").then(res => console.log(res?"exists":"doesnt exist"));

或者:

(async function(){

   console.log(await exists("CM7"));
})();
于 2017-09-10T09:23:06.520 回答
0

该行return true是从您传递给的匿名函数返回的forEach,而不是从您的exist方法返回的。

SerialPort.list似乎是异步的,因此您将不得不使用回调、承诺等,而不是依赖于直接从exist.

于 2017-09-10T09:21:05.463 回答