簡體   English   中英

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部分將拋出異常 - 這意味着該函數已退出 --> 您的.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM