Javascript - я не могу получить доступ к содержимому моего списка - PullRequest
0 голосов
/ 14 апреля 2020

У меня проблема с javascript, и я хотел бы понять, почему и как это работает.

У меня есть объект, который использует API. В этом объекте у меня есть атрибут типа списка объекта.

Мои объекты хорошо осведомлены с данными. Но когда я пытаюсь получить доступ к своему списку объектов, я не могу.

Если я делаю

console.log (myObject.lstOtherObject);

Отображается мой список объектов.

Если я делаю

console.log (myObject.lstOtherObject[0]);

Это показывает мне undefined .

проблема с изображением

Если я помещу свой код в 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]);

1 Ответ

2 голосов
/ 14 апреля 2020

Если я это сделаю

console.log (myObject.lstOtherObject);

Отображается мой список объектов.

console.log вводит вас в заблуждение здесь. Это не оценка сразу. Он оценивает его, когда вы расширяете список в консоли разработчика.

Когда вы выполняете этот код, myObject.lstOtherObject еще не имеет содержимого.

Наиболее распространенная причина этого заключается в том, что Вы запустили асинхронную функцию, такую ​​как запрос Ajax, и попытались сразу использовать значение. Вы не можете сделать это, потому что вы не дали асинхронной функции возможности фактически выполнить. Вам необходимо использовать значение после завершения асинхронной функции - либо с помощью обратного вызова, обещания, либо асинхронного c / await.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...