Angular 中的 ngOnInit 中未填充数据

Data not being populated in ngOnInit in Angular

我正在调用虚拟网络 API 来填充 class 的变量以进一步使用它,但后来我遇到了一个让我感到困惑的奇怪场景:

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); 
    }
} 

仅当我使用 alert 时才会填充变量数据(仅用于检查)。如果我删除 alert("beforeConsole"); 然后控制台给我 undefined.

我无法理解这一点。请提出实际情况。

Http.get returns 一个 Observable 并且是异步的。 您的请求有时间处理前 console.log 运行 秒。

将你的 console.log 移到你的订阅中,因为这将 运行 一旦 observable 发出。

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;
   });

我建议您使用 async await。

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); }
}