Restangular:失败的请求停止执行等待
Restangular: Failed requests stops execution with await
我有一个如下所示的错误拦截器:
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 & use 。这将需要大量返工。
谁能告诉我这里缺少什么?
问题是您没有任何错误处理。如果您的请求失败,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();
我有一个如下所示的错误拦截器:
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 & use 。这将需要大量返工。
谁能告诉我这里缺少什么?
问题是您没有任何错误处理。如果您的请求失败,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();