为什么显示undefined而不显示对象-(Angular HTTP请求)

时间:2019-04-10 06:08:17

标签: json angular http

我想从Spring Boot API获取一个数组,但无法将数据正确转换为对象

这是我的模特

export class Uczen {

  constructor(
    public firstname: string,
    public lastname: string,
    public email: string,
    public gender: string,

  ) {  }

}

服务

getPersons() {
    return this.http.get('http://localhost:8080/myApp/persons');
}

这是我的 component.ts 代码

  osoby: Uczen[] = [];

ngOnInit() {
  this.personService.getPersons().subscribe((result: Uczen[]) => {
        for (const item of result) {
        this.osoby.push(item);
      }
  });
  console.log(this.osoby[1]);
  console.log(this.osoby.length);
}

显示“未定义” “ 0” 作为显示,可能是将json转换为对象数组的问题; /

2 个答案:

答案 0 :(得分:1)

控制台应该在订阅中,因为这是一个异步过程

  this.personService.getPersons().subscribe((result: Uczen[]) => {
        for (const item of result) {
          this.osoby.push(item);
        }

       console.log(this.osoby[1]);
       console.log(this.osoby.length);
  });

答案 1 :(得分:0)

在ts文件中,您具有ngOnInit()方法,ngOnInit是组件的生命周期挂钩,在初始化组件时运行。

1)最初,该控件调用getPersons()方法,这将花费一些时间(几毫秒)来从服务器获取响应。

2)由于异步行为,在我们从远程服务器获得响应之前,控件进入了控制台语句行并执行了它。   此时,变量 osoby 仍然是一个空数组,这就是为什么要访问未定义的空数组的原因。

3)如果您在订阅内编写相同的控制台行,则仅在收到服务器的响应后,对这些行的控件才会运行。

storage