打字稿代码
SaveEmployee() {
let employeeAge= 0;
employeeAge = GetAge();
if(employeeAge >18) {
//some logic Code comes here
} else {
//some other logic Code comes here
}
}
GetAge() {
let age= 0;
this.employeeService.getAge(this.employeeId).subscribe(data => {
age= data; });
return age;
}
我正在使用角度打字稿代码更新具有年龄条件的员工。在这里,GetAge()方法始终返回0。SaveEmployee()方法在计算年龄之前执行。请帮助我解决问题。
答案 0 :(得分:0)
不会。因为employeeService.getAge(...)
将异步返回响应。要解决此问题,请执行以下操作:
async SaveEmployee() {
let employeeAge = 0;
employeeAge = await GetAge();
if (employeeAge > 18) {
//some logic Code comes here
} else {
//some other logic Code comes here
}
}
async GetAge() {
let age = 0;
const age = await this.employeeService.getAge(this.employeeId).toPromise();
return age;
}
在这里,我们使用的是可用于Promise的最新ES2018 async
await
语法。
我不是subscribe
到Observable
返回的employeeService.getAge(...)
,而是使用toPromise()
将其转换为Promise。
然后我可以在其上使用await,然后执行有需要的操作。
答案 1 :(得分:0)
您的异步方法将在不同的线程中运行-因此,我认为您不会在订阅完成之前就已经存在了,其余代码不会等待-您可以像这样在订阅内部移动逻辑
this.employeeService.getAge(this.employeeId).subscribe((data) => {
if(data >18) {
//some logic Code comes here
} else {
//some other logic Code comes here
}
});
希望有效-编码愉快:)
更新:
您可以使用promise
来获取数据,尝试执行类似的操作
GetAge() {
return new Promise(res => {
this.employeeService.getAge(this.employeeId).subscribe(data => {
res(data);
});
});
}
从诺言中读取数据
SaveEmployee() {
let employeeAge= 0;
this.GetAge().then((res) => {
if(res >18) {
//some logic Code comes here
} else {
//some other logic Code comes here
}
});
}
否则,您可以将数据发送到另一个函数并在那里处理逻辑,我不确定这是正确的方法,因为您最终会创建仅对函数依赖的方法
GetAge() {
this.employeeService.getAge(this.employeeId).subscribe(data => {
SomeMethod(data);
});
}
我认为Promise可能对您有所帮助-编码愉快:)
答案 2 :(得分:0)
http帖子或http get服务调用将异步工作。
您可以像下面这样编写第二个写代码: