Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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-我无法访问列表的内容_Javascript_Typescript - Fatal编程技术网

Javascript-我无法访问列表的内容

Javascript-我无法访问列表的内容,javascript,typescript,Javascript,Typescript,我对javascript有一个问题,我想了解它的工作原理和原因 我有一个使用API的对象。在这个对象中,我有一个对象列表类型的属性 我的对象可以很好地了解数据。 但是当我尝试访问我的对象列表后,我就不能了 如果我这样做 console.log (myObject.lstOtherObject); console.log (myObject.lstOtherObject[0]); console.log (myObject.lstOtherObject); 将显示我的对象列表 如果我这样做

我对javascript有一个问题,我想了解它的工作原理和原因

我有一个使用API的对象。在这个对象中,我有一个对象列表类型的属性

我的对象可以很好地了解数据。 但是当我尝试访问我的对象列表后,我就不能了

如果我这样做

console.log (myObject.lstOtherObject);
console.log (myObject.lstOtherObject[0]);
console.log (myObject.lstOtherObject);
将显示我的对象列表

如果我这样做

console.log (myObject.lstOtherObject);
console.log (myObject.lstOtherObject[0]);
console.log (myObject.lstOtherObject);
它显示我没有定义

如果我把我的代码放在setTimeout中,我没有问题

有什么问题吗

谢谢你的回复

编辑1:

 public static discoverBridge(){
    BridgeController.lstBridge = [];
    getRequest(URL).then(result => {
        for(const brd of result.data){
            BridgeController.lstBridge.push(new Bridge(
                brd.id,
                brd.internalipaddress,
                'macaddress' in brd ? brd.macaddress : '',
                'name' in brd ? brd.name : ''));
        }
    });
}

export async function getRequest(url: string, data?: any[]) {
    return await axios.get(url, data).then((response: any) =>{        
           return { status:response.status, data:response.data };
    });
}

BridgeController.discoverBridge();
console.log(BridgeController.lstBridge[0].lstLights[0]);
console.log(BridgeController.lstBridge[0].lstLights[0]);
如果我这样做

console.log (myObject.lstOtherObject);
console.log (myObject.lstOtherObject[0]);
console.log (myObject.lstOtherObject);
将显示我的对象列表

console.log
在这里误导了您。它不是直接评估它。当您在开发人员控制台中展开列表时,它将对其进行评估

执行此代码时,
myObject.lstOtherObject
尚未包含任何内容

最常见的原因是您启动了一个异步函数,例如Ajax请求,并试图立即使用该值。您不能这样做,因为您没有给异步函数一个实际执行的机会。您需要在异步函数完成后使用该值–可以使用回调、承诺或异步/等待

如果我这样做

console.log (myObject.lstOtherObject);
console.log (myObject.lstOtherObject[0]);
console.log (myObject.lstOtherObject);
将显示我的对象列表

console.log
在这里误导了您。它不是直接评估它。当您在开发人员控制台中展开列表时,它将对其进行评估

执行此代码时,
myObject.lstOtherObject
尚未包含任何内容


最常见的原因是您启动了一个异步函数,例如Ajax请求,并试图立即使用该值。您不能这样做,因为您没有给异步函数一个实际执行的机会。您需要在异步函数完成后使用该值–可以使用回调、承诺或异步/等待。

听起来像是异步的。这是我们看不到的代码。请添加响应数据结构并检查@epascarello提到的内容。请粘贴完整的控制台日志。当给出关于上下文和状态的不完整信息时,很难提供帮助。另外,在调用addLight之前,您可能正在做第二个日志?我根据请求添加了代码,以便您可以帮助我。听起来好像有些东西是异步的。这是我们看不到的代码。请添加响应数据结构并检查@epascarello提到的内容。请粘贴完整的控制台日志。当给出关于上下文和状态的不完整信息时,很难提供帮助。另外,也许你在调用addLight之前正在做第二个日志?我按照要求添加了代码,以便你能帮助我。好的,如果我想调用API并使用结果,我需要这样做
async function getRequest(){return await axios.get(URL);}
,并且我保证会得到我的APIOk结果,因此,如果我想调用一个API并使用所需的结果,我需要这样做
异步函数getRequest(){return await axios.get(URL);}
,并且在承诺中我得到了API的结果