Почему это не определено? Как я могу решить это? - PullRequest
0 голосов
/ 24 апреля 2019

когда я пытаюсь получить этот console.log (this.empresas [0]);он говорит, что он не определен, но empresas загружен в функцию.

empresas: any;

constructor(...) {
this.getEmpresas();
console.log(this.empresas[0]);
}

getEmpresas(){
this.empresas = [];
this.http.get("http://url").subscribe( data => {
this.empresas = JSON.parse(data["_body"]);
}, err =>{
console.log(err);
});
}

1 Ответ

0 голосов
/ 25 апреля 2019

Поскольку, просто вызвав getEmprass(), значение this.emprass не будет обновлено. getEmprass() немедленно вернется без обновления. Позже , когда http-запрос завершен, this.emprass обновляется, но это после времени, когда вы напечатали его значение.

Многие вещи происходят в Javascript асинхронно. Observables и функция подписки - одна из них: ее содержимое будет выполняться асинхронно в будущем (аналогично обратным вызовам).

Вы можете изменить свой код на это:

constructor(...) {
    this.getEmpresas();
    console.log('hey, getEmpresas() finished!');
}

getEmpresas(){
    this.empresas = [];
    this.http.get("http://url").subscribe( data => {
    this.empresas = JSON.parse(data["_body"]);
    console.log(this.empresas[0]);//---------------------------> Print it here
}, err =>{
    console.log(err);
});

}

Если вы хотите подождать в функции конструктора до завершения http-запроса, вам следует использовать асинхронную функцию .

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