Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js serialport无法在serialport.list函数外部传递变量_Javascript_Node.js_Scope_Node Serialport - Fatal编程技术网

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

Javascript node.js serialport无法在serialport.list函数外部传递变量,javascript,node.js,scope,node-serialport,Javascript,Node.js,Scope,Node Serialport,我试图在运行时使用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) {

我试图在运行时使用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正在执行。库提供了您正在使用的回调和承诺。这两种方法中的任何一种都可以用来确保事情按顺序运行。我推荐承诺

const SerialPort=需要“SerialPort”; SerialPort.list//返回解析为端口列表的承诺 //特定端口的筛选器 .thenports=>ports.filterport=>port.pnpId==USB\\VID_0451&PID_BEF3&MI_00\\6&808E38E&0&0000 //日志信息 .thenports=>{console.log'inner',端口[0]。comName'outer',端口[0];返回端口}