【发布时间】:2021-10-18 03:19:55
【问题描述】:
我正在尝试设置表单提交,其中表单本身包含一个字段,该字段在应用程序的其他地方使用,因此有自己的服务与之相关联。我的目标是为表单设置提交按钮以执行该特定字段的服务调用,等待它完成并成功响应,然后继续执行常规表单提交逻辑。
这是我迄今为止尝试过的简化版本:
async onSubmit(form) {
if(specialField) {
const response = await this.updateSpecialField();
}
// I will leave the rest of the form submission abstracted away
}
async updateSpecialField() {
this.specialService.updateField().subscribe(then => {
this.specialService.loadingFields$.subscribe(data => {
this.loading = data;
});
});
}
在这种情况下,服务调用是在后台进行的,并且总是在表单提交完成后完成。由于我没有走这条路,所以我尝试使用 await 并承诺在继续之前完成服务调用。
下面是同一个 updateSpecialField 函数的不同方法:
async updateSpecialField() {
let updatedFieldResponse = await this.specialService.updateField().toPromise();
return Promise.resolve(updatedFieldResponse);
}
在这种情况下,返回行似乎永远不会执行,表单提交也不会发生。我从服务中获得了成功的响应,但它没有从我期望的位置恢复执行代码行。
【问题讨论】:
标签: javascript angular typescript async-await