我正在尝试解析有效串行设备的列表,以便可以将它们输出到UI,但我可能会尝试尝试,此函数末尾返回的数组未正确传递。我最终收到来自console.log()和我的开发人员控制台的冲突结果。
这是函数本身。
function listValidDevices(){ // gets a list of valid devices with vid, pid, and com name
var parsedDeviceInfo = []
var rawDeviceInfo = []
parsedDeviceInfo.size = 0
SerialPort.list().then((value)=>{
//console.log(value)
rawDeviceInfo = value;
//console.log(rawDeviceInfo)
for(var i = 0; i < rawDeviceInfo.length; i++){
if(isSupportedDevice(rawDeviceInfo[i]))
{
//console.log("this device is supported")
parsedDeviceInfo.push({deviceName : rawDeviceInfo[i].deviceName, portNumber : rawDeviceInfo[i].comName, pid : rawDeviceInfo[i].productId, vid : rawDeviceInfo[i].vendorId})
parsedDeviceInfo.size++
console.log(parsedDeviceInfo, parsedDeviceInfo.length)
var copy = parsedDeviceInfo;
console.log("copy", copy, "copyLength", copy.length)
}
}
},
(error)=>{
console.log(error)
})
console.log(parsedDeviceInfo.size)
return parsedDeviceInfo
}
然后我这样调用函数
var devices = listValidDevices()
console.log(devices, devices.length)
开发人员控制台将显示length = 1和size = 1(我按下的对象也会显示),但是console.log()将显示length = 0和size = 0。 list()。then()似乎一切正常。 Console.log()输出大小1,长度1
这里有些事情是我不了解的。数组和对象应该在任何情况下都通过引用传递,但是在这里,显然不是。