为什么它是未定义的?我该如何解决?

时间:2019-04-24 13:59:30

标签: json asynchronous ionic3

当我尝试获取此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 :(得分:0)

由于仅通过调用getEmprass()this.emprass的值将不会更新。 getEmprass()将立即返回而不进行更新。 稍后,当http请求完成时,this.emprass会更新,但这是在 您打印其值的时间之后。

许多事情在Javascript中都是异步发生的。 Observables和subscription函数就是其中之一:它的内容将来会异步执行(类似于回调)。

您可能想要将代码更改为此:

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请求完成,则应使用async function