首页 > 解决方案 > 如何访问块外行为主体的订阅块变量

问题描述

我正在使用行为主题并在 ts 文件中订阅它。

试图访问 ts 文件中主题块之外的变量..

service.ts 的代码


 private messageSource = new BehaviorSubject<any>(null);

  constructor(
    private apiService: ApiService
  ) {
  }

  // try

  sendMessage(value: any) {
   this.messageSource.next(value);
  }

  get getMessage() {
    return this.messageSource.asObservable();
    
   }```

now in TS file

ngOnInit() {

// this.viewUser = this.commonService.getMessage;

this.subscription = this.commonService.getMessage.subscribe(value => {
  this.viewUser = value; 
  console.log(this.viewUser)
 });


 console.log(this.viewUser)

}

文件控制台显示数据..但在第二个控制台中,它显示了行为主题的初始值,即。null 如何获取块外的数据

标签: angulartypescriptrxjs

解决方案


你里面的东西subscribe是异步运行的。

this.subscription = this.commonService.getMessage.subscribe(value => {
  this.viewUser = value; 
  console.log(this.viewUser)
 });

console.log(this.viewUser) // <-- This is running before what's inside subscribe

您可以使用async await使函数 async 和 sync 内部的内容:

this.viewUser = await this.commonService.getMessage.asPromise();

包含此代码的函数应该是async.


推荐阅读