乱码:失败的请求会在等待时停止执行

时间:2019-02-13 12:56:48

标签: angular typescript angular-promise restangular ngx-restangular

我有一个如下的错误拦截器:

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调用。所以我不能删除等待然后使用。这将需要大量的返工。

谁能告诉我我在这里想念的东西吗?

1 个答案:

答案 0 :(得分: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();