NodeJS 串口检查端口是否存在功能不起作用
NodeJS serialport check if port exists function does not work
我构建了一个函数,通过 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
谢谢!
行 return true
从您传递给 forEach
的匿名函数返回,而不是从您的 exist
方法返回。
SerialPort.list
似乎是异步的,因此您将不得不使用回调、承诺等,而不是依赖直接从 exist
.
返回值
由于端口检查是异步的,您可能需要一个有前途的功能:
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"));
})();
我构建了一个函数,通过 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
谢谢!
行 return true
从您传递给 forEach
的匿名函数返回,而不是从您的 exist
方法返回。
SerialPort.list
似乎是异步的,因此您将不得不使用回调、承诺等,而不是依赖直接从 exist
.
由于端口检查是异步的,您可能需要一个有前途的功能:
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"));
})();