变量已更改为默认值,尽管我已在订阅函数中为其分配了一个值

时间:2018-07-10 14:01:09

标签: angular rxjs

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

有人可以解释这个问题的原因

代码

firstComponent

  this.dataService.activateMenusTab.next(false);

secondComponent

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

1 个答案:

答案 0 :(得分:2)

除了同步和异步之外,什么都没有。这就是为什么您在订阅之外获得this.isMediaTabActive值的原因。

在该示例中,将this.isMediaTabActive = true;调用到将异步执行的服务的同时执行this.dataService.activateMenusTab。也就是说,当程序执行其他操作时,查询将在后台处理,一旦查询数据准备就绪,您将可以使用它进行任何操作。

  

下面,我提到了将要执行的行的顺序。

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

有关更多信息:Sync vs Async