我有一个如下的错误拦截器:
RestangularProvider.addErrorInterceptor((response) => {
const error = EnumerableFromObject(response.error.Errors)
.Select(i => i.Value.Message)
.FirstOrDefault();
toastr.error(error, "Error");
return true;
});
}
下面是我的身份验证服务的代码:
async Login(login: string, password: string) {
const sessions = this.rest.all("sessions");
const params = {Login: login,Password: password };
const response = await sessions.post(params).toPromise();
return response;
}
这就是我在组件中调用它的方式:
this.loader.show();
const response = await this.authorizationService.Login(login, password);
this.loader.hide();
所以我必须在服务完成之后(无论是否失败)隐藏加载程序。
我的问题是,由于任何原因导致请求失败(例如错误的凭据),执行将停止,并且永远不会到达this.loader.hide();
不使用then
怎么办?在我的项目中,所有方法都用await
调用。所以我不能删除等待然后使用。这将需要大量的返工。
谁能告诉我我在这里想念的东西吗?
答案 0 :(得分:1)
问题是您没有适当的错误处理。如果您的请求失败,则await
部分将引发异常-这意味着该函数已退出->您的.hide()
调用将永远不会到达
要处理此问题,您可以将其包装在try catch中,例如
this.loader.show();
try {
const response = await this.authorizationService.Login(login, password);
} catch (error) {
// do something with the error here
}
this.loader.hide();