Javascript node.js serialport无法在serialport.list函数外部传递变量
我试图在运行时使用node.js serialport模块获取设备的COM端口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) {
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];返回端口}