繁体   English   中英

node.js serialport无法在SerialPort.list函数外部传递变量

[英]node.js serialport cannot pass variable outside SerialPort.list function

我正在尝试使用node.js serialport模块在运行时获取设备的COM端口

const SerialPort = require('serialport');
var fs = require('fs');

var serialVar = getSerialPort();

console.log("outer: "+serialVar);

function getSerialPort() 
{
    SerialPort.list(function (err, ports) {
        ports.forEach(function(port) {
            if (port.pnpId == "USB\\VID_0451&PID_BEF3&MI_00\\6&808E38E&0&0000") {
                console.log("inner: "+port.comName);
                return port.comName;
            } 
        });
    });
}

输出:

outer: undefined
inner: COM8

从输出中可以看出, getSerialPort()在脚本中的所有其他内容都已运行之后才完成,而不是在继续超过被调用点之前全部运行。 我不确定为什么会这样。

我已经尝试过几种变体,例如:

const SerialPort = require('serialport');
var fs = require('fs');

var serialVar = {};
getSerialPort();

console.log("outer: "+serialVar.port);
function getSerialPort() 
{
    SerialPort.list(function (err, ports) {
        ports.forEach(function(port) {
            if (port.pnpId == "USB\\VID_0451&PID_BEF3&MI_00\\6&808E38E&0&0000") {
                serialVar.port = port.comName;
                console.log("inner: "+serialVar.port);
            }
        });
    });
}

没有变化。

JavaScript本质上是异步的。 发生的情况是在列出串行端口之前, console.log正在执行。 该库提供了一个回调(您正在使用)和一个Promise。 这些中的任何一个都可以用来确保事情按顺序进行。 我推荐诺言。

 const SerialPort = require('serialport'); SerialPort.list() // returns promise that resolves to list of ports // filters for a specific port .then(ports => ports.filter(port => port.pnpId == "USB\\\\VID_0451&PID_BEF3&MI_00\\\\6&808E38E&0&0000")) // logs info .then(ports => {console.log('inner',port[0].comName, 'outer', port[0]); return ports}) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM