如何在订阅方法之外获取价值
public ttl_count = 0;
ngOnInit() {
this.MacService.getAllCouseCount().subscribe((res)=> {
this.ttl_count = res['count']
});
}
每当我在订阅函数中console.log(this.ttl_count)
时,我都会得到正确的结果,但是每当我在订阅函数之外进行记录时,我都会得到0
答案 0 :(得分:1)
这是一个已知的问题。 这是因为由于observable&subscription的所有行为都是异步的,因此在订阅之后它将具有该值。因此,该功能应该在子程序之后被触发。
public ttl_count=0;
ngOnInit()
{
this.MacService.getAllCouseCount().subscribe((res)=>
{
this.ttl_count=res['count']; // <-- just here it gets the value.
console.log(this.ttl_count); // <-- it has value, it happend after!
this.example();
});
console.log(this.ttl_count); // <-- no value, it happend before.
}
public example(): void
{
console.log(this.ttl_count); // <-- it has value here.
}
答案 1 :(得分:1)
这是因为this.MacService.getAllCouseCount().subscribe
方法是异步的,并且首先执行外部订阅方法的console.log(this.ttl_count)
,直到您从this.MacService.getAllCouseCount()
获得响应为止。
您可以使用async-await或将this.MacService.getAllCouseCount()
转换为Promise。