[英]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
部分將拋出異常 - 這意味着該函數已退出 --> 您的.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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.