在ngOnInit()中未定义但在函数中未返回的数据

时间:2020-04-09 03:18:06

标签: angular typescript angular9

我正在从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

1 个答案:

答案 0 :(得分:2)

这是因为getAnimals是异步的。这就是console.log(this.animalsFur);返回undefined的原因,因为在调用console语句时getAnimals尚未完成运行。如果您想了解更多有关JavaScript event loops的信息,则应该阅读更多。

另一方面,调用console中的subscribe语句将确保为animalsFur属性分配响应中的值,作为{{1 }}仅在返回subscribe的可观察值之后运行。

getAnimals()