【发布时间】:2016-02-11 13:54:05
【问题描述】:
javascript 或 angular2 中有没有办法
获取待处理的 http 请求列表?
目标是启动“其他几个进程”
根据这份榜单的波动。
是否存在类似可访问的请求堆栈?
谢谢。
【问题讨论】:
标签: javascript http request angular
javascript 或 angular2 中有没有办法
获取待处理的 http 请求列表?
目标是启动“其他几个进程”
根据这份榜单的波动。
是否存在类似可访问的请求堆栈?
谢谢。
【问题讨论】:
标签: javascript http request angular
其实你可以扩展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。
【讨论】: