我正在使用主题,该主题正在从一个组件中发出一个值。然后,我将其订阅到另一个组件中,并将其分配给一个变量。我面临的问题是,当我在订阅函数内部打印变量时,我可以看到该值,而当我尝试在订阅函数外部打印时,它显示默认值。
有人可以解释这个问题的原因
代码
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
答案 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