未在subscribe方法之外设置将值分配给subscribe方法内的变量

时间:2019-04-30 08:13:07

标签: angular angular5

如何在订阅方法之外获取价值

public ttl_count = 0;
ngOnInit() {
    this.MacService.getAllCouseCount().subscribe((res)=> {
        this.ttl_count = res['count']
    });
}

每当我在订阅函数中console.log(this.ttl_count)时,我都会得到正确的结果,但是每当我在订阅函数之外进行记录时,我都会得到0

2 个答案:

答案 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。