以角度5获取待处理的http请求的总数

时间:2018-03-05 11:32:34

标签: typescript httpclient angular5

嗯,我对角度5非常新,我在寻找一些问题时遇到了一些麻烦。那么我可以在angularJs中像$http.pendingRequests那样获得angular5中的待处理请求总数吗?

1 个答案:

答案 0 :(得分:0)

  

请注意,以下代码是针对Angular 8编写的。自从angular 5以来,语法可能会有一些小的变化,但总体思路保持不变

首先创建一个http拦截器。您可能想要创建一个具有BehaviorSubject保留请求计数的服务,以便能够将该服务注入到任何地方并订阅计数器值。如果您具有应用程序状态(即使用ngrx时),只需将计数器值保存在存储区中即可。在任何地方注入拦截器都是非常糟糕的做法。

import {
  HttpEvent,
  HttpHandler,
  HttpInterceptor,
  HttpRequest,
} from '@angular/common/http';
import { Observable } from 'rxjs';
import { finalize } from 'rxjs/operators';

export class RequestCountHttpInterceptor implements HttpInterceptor {
  pendingRequestsCount = 0;

  intercept(
    request: HttpRequest<any>,
    next: HttpHandler,
  ): Observable<HttpEvent<any>> {
    this.pendingRequestsCount++;
    return next
      .handle(request)
      .pipe(finalize(() => this.pendingRequestsCount--));
  }
}

接下来,您必须将其放入AppModule中的提供程序中(以确保整个应用程序中只有一个此拦截器实例)

import { HTTP_INTERCEPTORS } from '@angular/common/http';
...

@NgModule({
 ...
  providers: [
    ...
    {
      provide: HTTP_INTERCEPTORS,
      useClass: RequestCountHttpInterceptor,
      multi: true,
    },
  ],
  ...
})
export class AppModule {}

就是这样。现在,请求计数将位于HttpRequestCountInterceptor的实例中(如上所述,将其移至另一个服务或商店)。