我有一个错误拦截器,如下所示:
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
调用。所以我无法删除等待和使用。这将需要这么多的返工。
谁能告诉我这里缺少什么?
问题是您没有任何错误处理。如果您的请求失败,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();