RVP*_*RVP 33 post http angular
我遇到了一个奇怪的问题,Angular2的(RC1)Http服务执行两次http.post调用.我调试了我的应用程序,我知道这不是一个点击事件问题.所有通往核心服务呼叫的呼叫
public create(json: Object, params?: Object): Observable<T> {
let body = JSON.stringify([json]);
let headers = this.getHeaders();
let options = new RequestOptions({ headers: headers });
return this._http.post(this.createURL(this.getCreateURL(), [], params), body, options)
.map(res => this.handleObjectResponse(res));
}
Run Code Online (Sandbox Code Playgroud)
运行一次.然后,当我开始跟踪问题时,我发现我的处理程序this.handleObjectResponse被执行了两次.所以我进一步钻研并达到@angular/http/src/backends/xhr_backend.ts了他们这样做的地方
constructor(req: Request, browserXHR: BrowserXhr, baseResponseOptions?: ResponseOptions) {
this.request = req;
this.response = new Observable<Response>((responseObserver: Observer<Response>) => {
let _xhr: XMLHttpRequest = browserXHR.build();
_xhr.open(RequestMethod[req.method].toUpperCase(), req.url);
// load event handler
...
..
Run Code Online (Sandbox Code Playgroud)
所以我打开一个断点this.request = req;,然后打开另一个断点let _xhr: XMLHttpRequest = browserXHR.build();,我发现我击中了第一个断点,但后来我从回调中击中了第二个断点两次.
这让我疯了,所以我想检查一下熟悉angular2内部的人是否可以说明这看起来像是一个错误或者我做错了什么.
在我的代码中,我创建了一些抽象的通用服务类:GenericService和FullService,它扩展了GenericService.这两个都是抽象的并且使用泛型,并且在不同组件中注入的实际服务类都扩展了GenericService或FullService.你们认为这个设置可能是双重执行后的责任吗?
所有的想法都很感激!
提前致谢!
PS
这不会发生在获取,但它也发生在put.
tel*_*ziz 64
http服务返回一个在每个订阅上执行的冷可观察对象,您希望将其转换为仅在第一个订阅时执行的热可观察对象,并为后续订阅共享相同的值.
要转换它,您只需分享它:
return this._http.post(this.createURL(this.getCreateURL(), [], params), body, options)
.map(res => this.handleObjectResponse(res))
.share();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16311 次 |
| 最近记录: |