array.length为1,但console.log()输出0

时间:2018-09-28 16:27:31

标签: javascript

我正在尝试解析有效​​串行设备的列表,以便可以将它们输出到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

这里有些事情是我不了解的。数组和对象应该在任何情况下都通过引用传递,但是在这里,显然不是。

0 个答案:

没有答案