【问题标题】:How to get all the pending http requests in javascript?如何在javascript中获取所有待处理的http请求?
【发布时间】:2016-02-11 13:54:05
【问题描述】:

javascript 或 angular2 中有没有办法

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

目标是启动“其他几个进程”

根据这份榜单的波动。

是否存在类似可访问的请求堆栈?

谢谢。

【问题讨论】:

    标签: javascript http request angular


    【解决方案1】:

    其实你可以扩展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

    【讨论】:

    • 感谢您的回答。
    【解决方案2】:

    如果你想这样做,你需要在后端。如果您的网站托管在 php 上,那么您不能在 javascript 中进行。但是如果你使用 node.js 那肯定是可以的,因为 node.js 在后端使用了 javascript。

    【讨论】:

    • 这并不总是正确的,如果您在前端发出请求,您当然至少可以手动跟踪它们
    • 好的,如果你说的是你从前端发出的请求,那么用变量跟踪它们应该很容易......
    • 我认为他也打算从其他用户那里获取所有待处理的请求。
    猜你喜欢
    • 2019-10-27
    • 2020-11-05
    • 2018-07-12
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2020-11-05
    • 2015-09-19
    • 2017-05-18
    相关资源
    最近更新 更多