gpt4 book ai didi

javascript - Node.js Serialport 无法在 SerialPort.list 函数之外传递变量

转载 作者:行者123 更新时间:2023-12-03 03:06:50 31 4
gpt4 key购买 nike

我正在尝试使用node.js串行端口模块在运行时获取设备的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 。其中任何一个都可以用来确保事情按顺序进行。我推荐 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})

关于javascript - Node.js Serialport 无法在 SerialPort.list 函数之外传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47129112/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com