【问题标题】:NodeJS serialport check if port exists function does not workNodeJS串口检查端口是否存在功能不起作用
【发布时间】:2017-09-10 08:10:08
【问题描述】:

我已经构建了一个函数,通过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

谢谢!

【问题讨论】:

    标签: javascript node.js node-serialport


    【解决方案1】:

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

     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.list 还返回一个Promise,因此您可以链接它而不是直接创建一个新的。
    • 我真的无法理解它是如何工作的。我正在尝试将其设置为 if syntax 与我发布的代码相同,我所做的只是 console.logged
    • function exists(portName) { return new Promise(res => { SerialPort.list((err, ports)=>{ PortResults(ports.some(port => port.comName === portName)); }); }); } function PortResults(res){ return res; } console.log(exists(portName)); 我已经检查了链接,并尝试了以下解释,如您所见。我收到Promise { <pending> }
    • @itzikb 你的代码没有意义。你就不能接管我的吗?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2019-02-06
      相关资源
      最近更新 更多