我正在从API返回数据,并放入了多个console.log()
语句进行调试。在ngOnInit()
中,console.log
正在打印undefined
,但是在单独的功能中,console.log
返回正确的数据,并且从理论上讲,在这两者之间没有其他处理。 / p>
ngOnInit() {
this.loadAnimalList('fur');
console.log(this.animalsFur);
}
loadAnimalList(classification: string) {
this.animalService.getAnimals(classification).subscribe((animals: Animal[]) => {
switch (classification) {
case 'fur':
this.animalsFur = animals;
break;
case 'feather':
this.animalsFeather = animals;
break;
case 'scales':
this.animalsScales = animals;
break;
case 'other':
this.animalsOther = animals;
break;
default:
this.animalsFur = animals;
break;
}
}, error => {
this.alertify.error(error, 'Failed to Load Animals...');
});
}
我在console.log中留了一个ID,该ID返回未定义,如果我在切换完成后放置了一个(例如),或者以防万一,则在控制台中显示正确的数据,只是不在onInit
答案 0 :(得分:2)
这是因为getAnimals
是异步的。这就是console.log(this.animalsFur);
返回undefined的原因,因为在调用console语句时getAnimals
尚未完成运行。如果您想了解更多有关JavaScript event loops的信息,则应该阅读更多。
另一方面,调用console
中的subscribe
语句将确保为animalsFur
属性分配响应中的值,作为{{1 }}仅在返回subscribe
的可观察值之后运行。
getAnimals()