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();