【发布时间】:2021-08-09 07:57:59
【问题描述】:
如果我需要提供更多代码或解释,请告诉我。
在 for 循环中调用服务方法后,我试图执行一些代码。我尝试了两种不同的方法。
在第一种方法中,console.log('1st After for loop') 在 for 循环之后打印,然后打印 console.log(data)
在第二种方法中,console.log('2nd- After for loop') 永远不会打印。
我想遍历列表。验证每个项目。如果不是验证不成功,显示请求确认。如果用户选择是,调用保存方法。
代码 sn-p #1:
save() {
this.selectRowData.forEach(async s => {
this.myService.validate(s.id).subscribe(data => {
console.log(data);
if(data) {
this.myService.confirm('Please confirm..', 'Selected Rule do not match expected rules. \n Do you want to continue? ', 'Yes', 'No')
.then((confirmed) => {
if(confirmed) {
console.log("User selected: Yes");
this.myService.save();
} else {
console.log("User selected: No");
}
}).catch(() => {
console.log("Error...");
});
}, (error: any) => {
alert("Error Linking Lot");
});
});
console.log('1st After for loop');
}
代码 sn-p #2:
async save() {
await new Promise(resolve => {
this.selectRowData.forEach(async s => {
let validateData = await this.myService.validate1(s.id);
console.log(validateData);
});
});
console.log('2nd- After for loop');
}
service.ts
validate(id: string): Observable < boolean > {
return this.httpClient.get < boolean > ('/RestWeb/validate?id=' + id);
}
validate1(id: string) {
return this.httpClient.get < boolean > ('/RestWeb/validate?id=' + id).toPromise();
}
【问题讨论】:
-
尝试使用 setTimeout() 函数。
标签: angular typescript async-await angular-promise