Javascript 在arrow函数内部更改的变量在arrow函数外部进行控制台操作时未更改

Javascript 在arrow函数内部更改的变量在arrow函数外部进行控制台操作时未更改,javascript,angular,typescript,arrow-functions,Javascript,Angular,Typescript,Arrow Functions,我正在使用angular和typescript,希望更改函数中变量的值。我正在使用服务获取数据。代码如下所示: isValue:boolean = false; onChangeValue(list: List) { this.someServive.getData(list).subscribe( item => { if(item.value === 1) { this.isValue = true;

我正在使用angular和typescript,希望更改函数中变量的值。我正在使用服务获取数据。代码如下所示:

 isValue:boolean = false;

  onChangeValue(list: List) {
     this.someServive.getData(list).subscribe(
        item => {
        if(item.value === 1) {
            this.isValue = true;
          }
       }); 
   console.log(this.isValue);          //the value is still false here  
  }
你好

这是因为您的服务调用是一个异步操作。当您的服务发出一些值时,浏览器不会等待,而这些值是您在订阅块中处理的

  isValue = false;

  onChangeValue(list: List) {
     this.someServive.getData(list).subscribe(item => {
       if (item.value === 1) {
         this.isValue = true;
         this.executeOnUpdateCallback();
       }
     });   
  }

  executeOnUpdateCallback() {
     console.log(this.isValue); // true  
  }

像这样的事情你应该做来处理它。我希望您已经了解了(请在google上搜索一下
js事件循环

因为javascript是异步的,所以在实际发生getData服务调用之前,该值不会更改

在您的情况下,控制台在getData发生之前执行

你可以带着承诺去尝试,也可以回电话

请尝试以下内容:

isValue:boolean = false;

onChangeValue(list: List) { 
   onDataRecieved((res)=>{
     console.log(this.isValue);
   });    
}       

onDataRecieved(cb){
 this.someServive.getData(list).subscribe(
      item => {
      if(item.value === 1) {
         this.isValue = true;
         cb(true);
      }
   });
}

谢谢@AlexanderFSP。我不确定上述解决方案在我的情况下会有什么帮助。为了向您澄清,isValue属性在我的模板中使用,在
div*ngIf=“isValue”
中,每当来自服务的数据进来并且等于1时,都应该显示div。在这种情况下,我如何使用上面的内容?@Laxmee,我想你的逻辑现在应该可以正常工作了,没有任何变化。当来自服务的数据到来时-您将isValue设置为等于true-更改检测机制触发(执行一些检查)并重新提交组件,因此此div变得可见。当然,如果您使用
ChangeDetectionStrategy.OnPush,它将不起作用