【发布时间】:2020-06-12 10:33:00
【问题描述】:
我正在尝试访问由 ngOnInit 中的函数分配的对象,但控制台日志显示它未定义,而在 LoadSelCompanies 订阅块中可以访问相同的变量:
export class dealComponent implements OnInit {
selfcompanies;
self;
dealForm: FormGroup;
constructor(private userService: UserService) { }
ngOnInit() {
this.AddControls();
this.LoadSelCompanies();
console.log(this.selfcompanies);
}
LoadSelCompanies() {
this.userService.LoadCompanyInfo().subscribe(data => {
this.selfcompanies = data;
console.log(data);
console.log(this.selfcompanies);
});
}
我对此一无所知,请帮助。
【问题讨论】:
-
selfcompanies 在服务调用/分配完成之前执行。
-
方法
this.LoadSelCompanies();做http调用,而它在console.log(this.selfcompanies);运行之前返回一些响应。见zeolearn.com/magazine/asynchronous-nature-of-javascript尝试使用async/awit -
发现此类问题的一个好方法是在其中放置几个断点(控制台日志也会这样做,但很高兴看到结果)。一个在 ngOnInit 的 console.log 行上,另一个在 LoadSelCompanies 的 console.log(this.selfcompanies) 上,看看哪个断点首先被击中。与 console.Log 一样,ngOnInnit 将首先触发,因为 observable 尚未完成。
-
@ajrthegreat 我同意每个人的观点。如果我在控制台中看到,我首先在日志中获取 json 对象,然后是 undefined。
-
也尝试更改我的代码,因为我了解异步行为stackoverflow.com/questions/37230545/… 但这又不起作用
标签: angular typescript angular9