如何在javascript中获取所有挂起的http请求

How to get all the pending http requests in javascript?

本文关键字:挂起 http 请求 获取 javascript      更新时间:2023-09-26

有没有办法在javascript或angular2

获取待处理的 HTTP 请求列表?

目标是启动"其他几个过程"

根据此列表的波动。

是否存在可访问的请求堆栈之类的东西?

谢谢。

事实上,您可以扩展Http类来拦截请求执行。

import {Injectable} from 'angular2/core';
import {Http,ConnectionBackend,RequestOptions,RequestOptionsArgs,Request} from 'angular2/http';
import 'rxjs/Rx';
import {MonitoringService} from './monitoring.service';
@Injectable()
export class CustomHttp extends Http {
  constructor(backend: ConnectionBackend,
              defaultOptions: RequestOptions,
              private monitoring:MonitoringService) {
    super(backend, defaultOptions);
  }
  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    console.log('request...');
    return super.request(url, options);
  }
  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    console.log('get...');
    return super.get(url, options);
  }
  (...)
}

您可以利用 finally 运算符来拦截与 HTTP 请求对应的可观察量的完成。可以在调用之前递增属性,并在finally运算符中递减属性。

get(url: string, options?: RequestOptionsArgs): Observable<Response> {
  this.monitoring.pendingRequestsNumber++;
  return super.get(url, options).finally(() => {
    this.monitoring.pendingRequestsNumber--;
  });
}

这个CustomHttp类可以像这样注册。我添加了一个监视服务来存储(和共享)待处理请求的数量:

import {bootstrap} from 'angular2/platform/browser';
import {provide} from 'angular2/core';
import {HTTP_PROVIDERS,Http,XHRBackend,RequestOptions} from 'angular2/http';
import {AppComponent} from './app.component';
import {CustomHttp} from './http.custom';
import {MonitoringService} from './monitoring.service';
bootstrap(AppComponent, [HTTP_PROVIDERS,
  MonitoringService,
  provide(Http, {
    useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, monitory:MonitoringService) => new CustomHttp(backend, defaultOptions, monitory),
    deps: [XHRBackend, RequestOptions, MonitoringService]
  })
]);

我创建了一个 plunkr 来描述实现这种方法的方法:https://plnkr.co/edit/qHNn5amI0byci9RMkZyE?p=preview。

如果你想这样做,你需要在后端。如果您的网站托管在php上,那么您不能在javascript中执行此操作。但是如果你使用node.js那么这当然是可能的,因为node.js在后端使用javascript。