如何解决异常跳过打字稿角度
我正在尝试执行验证,如果没有抛出异常,请执行操作。问题在于代码是异步的,因此“ CompletePlanConfirm()”方法始终运行,但是如果发生异常,则必须跳过该方法。 FirstCheck和secondCheck返回Observable。有没有办法做到这一点?
completePlan() {
try {
this.validatePlan();
this.completePlanConfirm();
} catch (error) {
throw error
}
}
validatePlan() {
this.planService.FirstCheck(this.plan.id).subscribe(
data => {
if (!data.result) {
throw Error('Error 1')
}
});
this.planService.SecondCheck(this.plan.id).subscribe(
data => {
if (!data.result) {
throw Error('Error 2')
}
});
}
解决方法
您可以使用async / await使您的代码同步。
首先更改您的validatePlan
函数,以使其可观察到的(以及一些更改,以避免嵌套订阅:
validatePlan() {
return this.planService.FirstCheck(this.plan.id).pipe(
map(data => {
if(!data.result) {
throw Error('Error 1')
}
}),switchMap(() => this.planService.SecondCheck(this.plan.id))
).pipe(
map(data => {
if(!data.result) {
throw Error('Error 1')
}
}),)
}
然后将completePlan
设为异步函数,并将await关键字置于validatePlan
函数之前(需要将其更改为.toPromise()
的Promise
async completePlan() {
try {
await this.validatePlan().toPromise();
this.completePlanConfirm();
} catch (error) {
throw error
}
通过这种方式,该函数的执行将是同步的,并且将在进一步执行之前等待validatePlan
(因此,如果引发错误,它将永远不会尝试确认计划)
我将使用async
和await
并使您的计划检查解决承诺。这使您的completePlan
功能更加整洁。
async completePlan() {
try {
const response1 = await this.checkFirstPlan();
const response2 = await this.checkSecondPlan();
this.completePlanConfirm();
} catch (error) {
console.error(error);
throw error;
}
}
checkFirstPlan(): Promise<any> {
return new Promise((resolve,reject) => {
this.planService.FirstCheck(this.plan.id).subscribe((data: any) => {
if (!data.result) {
throw new Error('Error 1')
}
resolve(data);
},(error: any) => {
throw new Error(msg);
},() => { });
});
}
checkSecondPlan(): Promise<any> {
return new Promise((resolve,reject) => {
this.planService.SecondCheck(this.plan.id).subscribe((data: any) => {
if (!data.result) {
throw new Error('Error 2')
}
resolve(data);
},() => { });
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。