gpt4 book ai didi

Angular2 http.post 执行了两次

转载 作者:太空狗 更新时间:2023-10-29 16:49:03 26 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,即 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));
}

运行一次。然后,当我开始跟踪问题时,我发现我的处理程序 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
...
..

所以我在 this.request = req; 上放置了一个断点,然后在 let _xhr: XMLHttpRequest = browserXHR.build(); 上放置了另一个断点,我发现我遇到第一个断点一次,然后我两次遇到回调中的第二个断点。

这让我抓狂,所以我想看看是否有任何熟悉 angular2 内部结构的人可以阐明这看起来像是一个错误还是我做错了什么。

在我的代码中,我创建了一些抽象的通用服务类:GenericService 和扩展了 GenericService 的 FullService。这两者都是抽象的,并且使用泛型,注入(inject)到不同组件中的真实服务类都扩展了 GenericService 或 FullService。你们认为这种设置可能是造成双重后执行的原因吗?

感谢所有想法!

提前致谢!

附言

gets 不会发生这种情况,但 puts 也会发生这种情况。

最佳答案

http 服务返回一个冷的可观察到的 executed on every subscribe ,您希望将其转换为仅在第一次订阅时执行并为后续订阅共享相同值的热可观察对象。

要转换它,您所要做的就是 share它:

return this._http.post(this.createURL(this.getCreateURL(), [], params), body, options)
.map(res => this.handleObjectResponse(res))
.share();

关于Angular2 http.post 执行了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com