Angular 数据未在ngOnInit中以角速度填充
我调用一个虚拟web API来填充类的一个变量以进一步使用它,但后来我遇到了一个奇怪的场景,这让我很困惑:Angular 数据未在ngOnInit中以角速度填充,angular,ngoninit,Angular,Ngoninit,我调用一个虚拟web API来填充类的一个变量以进一步使用它,但后来我遇到了一个奇怪的场景,这让我很困惑: export class myClass implements OnInit{ data : any; constructor (private http:HttpClient){} ngOnInit(){ this.http.get("http://dummy.restapiexample.com/api/v1/employee/82
export class myClass implements OnInit{
data : any;
constructor (private http:HttpClient){}
ngOnInit(){
this.http.get("http://dummy.restapiexample.com/api/v1/employee/82342").subscribe(e=>this.data = e);
alert("beforeConsole");
console.log(this.data);
var size = Object.keys(this.data).length;
alert(size);
}
}
变量数据仅在我使用警报时填充(仅用于检查)。如果我删除警报(“beforeConsole”)代码>然后控制台给我未定义的
我无法理解这一点。请说明实际发生的情况。Http.get返回一个可观察的,并且是异步的。
您的console.log在请求有时间处理之前运行
将您的console.log移动到订阅中,因为一旦发出可观测数据,它将运行
this.http.get("http://dummy.restapiexample.com/api/v1/employee/82342")
.subscribe(e => {
this.data = e;
console.log(this.data);
var size = Object.keys(this.data).length;
});
我建议您使用异步等待
ngOnInit(): void { this.initialize(); }
async initialize(): Promise<void> {
try {
this.data = await this.http.get("http://dummy.restapiexample.com/api/v1/employee/82342").toPromise();
console.log(this.data);
} catch (e) { console.error(e); }
}
ngOnInit():void{this.initialize();}
异步初始化():承诺{
试一试{
this.data=等待this.http.get(“http://dummy.restapiexample.com/api/v1/employee/82342)。toPromise();
console.log(this.data);
}catch(e){console.error(e);}
}
什么时候可以取消定义。还尝试使用console.log
notalert
调试您的代码我尝试了console.log的可能重复项,但它给我的是console.log(this.data)如果我不使用alert(“beforeConsole”);试试这个ngOnInit(){this.http.get(“http://dummy.restapiexample.com/api/v1/employee/82342subscribe(e=>{this.data=e;alert(“beforeConsole”);console.log(this.data);var size=Object.keys(this.data).length;}()=>{alert(size);});}
这类问题的答案可能已经足够多了。与其回答这个问题,不如考虑把它标记为重复的。这将有助于减少污染。谢谢:)