当我尝试获取此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);
});
}
答案 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。