使用http.get时如何获取非http状态代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用http.get时如何获取非http状态代码?相关的知识,希望对你有一定的参考价值。

我是TypeScript的新手,如果api的响应不是200,我一直试图将用户重定向到错误页面。我已经在网上搜索了很长时间,并且一直在尝试找到一种好的方法来执行此操作。这是我所拥有的:

我在服务类中有如下基本的http方法:

PullDataFromServer(id: string): Observable<any> {
    return this.http.get<string>(this.baseUrl + 'api/data/getdata?id=' + id, { observe: 'response' });
  }

在我的组件类上,我有这个:

    this.service.PullDataFromServer(this.userData.Id).subscribe({
      next: data => {
          this.data = data.body;
          this.loaded = true;
      },
      error: err => {
        this.router.navigate(['/errorpage']);
      }
      });

但是,如果http代码不是200,则在浏览器中可以看到服务器需要很长时间才能响应。我知道http调用是异步调用,您无法使其同步。在带入数据时,您只能有一些代码可以起作用。我的问题是,如何在服务器错误时如何重定向用户?

有些文章讨论异步调用,但是我不明白如何管理错误?任何帮助将不胜感激。

我也尝试过rxjs:

      map(() => ''),
        catchError((error: Error) => {
          return this.router.navigate(['/errorpage']);
        }));

如果有另一个电话,而我正在等待上一个电话,Aysnc Await会很好。但是,如果我仅在等待一个呼叫,并且需要该呼叫的响应怎么办?

答案

对于那些因http调用而苦苦挣扎并发现错误的新手,可以使用以下方法捕获错误并等待响应:

以上是关于使用http.get时如何获取非http状态代码?的主要内容,如果未能解决你的问题,请参考以下文章

获取状态码 http.get 响应 angular2

AngularJS - $http get 返回状态为 0 的错误?

如何使用 this.$http.get() 从 url 获取 json 数据?

如何修复对 etherpad 的 $http.get 请求上的“403(禁止)”

ESP8266通过http Get方法获取网络数据

AngularJS:如何通过$ http获取数据时禁用默认观察者