Javascript 在arrow函数内部更改的变量在arrow函数外部进行控制台操作时未更改
我正在使用angular和typescript,希望更改函数中变量的值。我正在使用服务获取数据。代码如下所示: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;
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,它将不起作用