【发布时间】:2020-01-30 19:06:31
【问题描述】:
类变量counties 不保留在fetchCounties() 的subscribe 方法中分配的值。记录临时变量数据会返回一个很好的县列表,订阅内部的 this.counties 也是如此,但是一旦我尝试在订阅之外访问它,它就会变得未定义。来自 Java 背景并且是 Angular/Typescript 的新手,这对我来说毫无意义......
public counties: ICounty[] = [];
public getCounties(): ICounty[] {
this.fetchCounties().subscribe(data =>{
console.log("data");
console.log(data);//logs correctly
this.counties = data;
console.log("counties inside subscribe " );
console.log(this.counties);//logs correctly
});
console.log("counties outside of subscribe " );
console.log(this.counties);//logs incorrectly (empty) >:0
return this.removeInvalidCounties(this.counties); //passes empty counties list...
}
【问题讨论】:
-
susbscribe异步运行,它在fetchCounties发出时运行。 -
Java没有异步功能吗?我不是专家,但我认为他们在那里的工作方式类似。
-
可能是最新的 java 版本,但我习惯于 Java 7/8 和旧版应用程序。我只是觉得无法将类变量分配给我需要的任何值非常奇怪。
-
问题不在于代码没有在订阅中运行,问题在于 this.counties 的值是在订阅中设置的,但直到为时已晚才知道这一点。我想这是一个状态问题。所以我的理解是,即使订阅没有完成,调用代码也会继续执行?如何在执行其他代码之前强制订阅完成?
标签: angular typescript