Restangular:失败的请求使用await停止执行

问题描述 投票:1回答:1

我有一个错误拦截器,如下所示:

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调用。所以我无法删除等待和使用。这将需要这么多的返工。

谁能告诉我这里缺少什么?

angular typescript angular-promise restangular ngx-restangular
1个回答
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();
© www.soinside.com 2019 - 2024. All rights reserved.