Subscribe 方法中的变量赋值不是在 subscribe 方法之外设置的

Assigning Value To Variable Within Subscribe Method is not set outside of the subscribe method

如何在订阅方法之外访问值

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

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

这是一个已知问题。 这是因为 observable 和 subscribe 的所有行为都是异步的,因此它将在订阅之后立即具有值。所以函数应该在 sub 之后被触发。

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.
}

这是因为 this.MacService.getAllCouseCount().subscribe 方法是异步的并且 console.log(this.ttl_count) 外部订阅方法首先执行,直到您从 this.MacService.getAllCouseCount()

获得响应

您可以使用 async-await 或将此 this.MacService.getAllCouseCount() 转换为 promise。