Angular 变量已更改为默认值,尽管我已在subscribe函数中为其赋值

Angular 变量已更改为默认值,尽管我已在subscribe函数中为其赋值,angular,rxjs,Angular,Rxjs,我使用的是主题,它从一个组件发出一个值。然后我在另一个组件中订阅它,并将其分配给一个变量。我面临的问题是,当我在subscribe函数内部打印变量时,我能够看到值,而当我尝试在subscribe函数外部打印时,它显示默认值 有人能解释一下这个问题的原因吗 代码 firstComponent this.dataService.activateMenusTab.next(false); 第二组件 this.isMediaTabActive = true; this.dataService.a

我使用的是主题,它从一个组件发出一个值。然后我在另一个组件中订阅它,并将其分配给一个变量。我面临的问题是,当我在subscribe函数内部打印变量时,我能够看到值,而当我尝试在subscribe函数外部打印时,它显示默认值

有人能解释一下这个问题的原因吗

代码

firstComponent

  this.dataService.activateMenusTab.next(false);
第二组件

this.isMediaTabActive = true;
 this.dataService.activateMenusTab.subscribe((res) => {
      this.isMediaTabActive = res;
      console.log(this.isMediaTabActive);//printing false
    });
    console.log(this.isMediaTabActive);//printing true

它只不过是同步和异步。这就是为什么您将this.isMediaTabActive的值设置为
subscribe之外的值

在本例中,
this.isMediaTabActive=truethis.dataService.activateMenusTab
将被执行。也就是说,查询将在后台处理,而您的程序正在做其他事情,并且一旦查询数据准备好,您将对其执行任何您想要的操作

下面我已经提到了将要执行的行的顺序


有关更多信息:

当您发送电子邮件时,您是否可以在单击“发送”按钮后立即看到收件人的回复?否。只有在接收者阅读电子邮件并做出响应后,才能看到响应。彼此彼此。这就是为什么服务返回一个可观察的值:让您订阅,以便在执行console.log()很久之后通知您响应何时最终可用。为了使用更新的值,您必须在
subscribe
回调中进行处理。那么我需要做什么,以便在订阅函数之后,变量应该有一个我在subscribeNo中设置的值,你不能。subscribe后面的console.log语句将只打印全局值,正如我在回答中已经说过的那样。处理这个问题的一种方法是创建一个函数,该函数将在一组时间间隔上运行。检查this.isMediaTabActive.Ya的值是否发生了变化。我已经解决了这个问题,方法是删除subject并在服务类中创建一个变量,在一个组件中为它赋值,在另一个组件中使用它并使其同步
1.    this.isMediaTabActive = true;
2.    this.dataService.activateMenusTab.subscribe((res) => {
4.       this.isMediaTabActive = res;
5.       console.log(this.isMediaTabActive);//printing false
      });
3.        console.log(this.isMediaTabActive);//printing true