angularjs – Angular2 http.post被执行两次

我遇到了一个奇怪的问题,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上然后在另一个断点_xhr:XMLHttpRequest = browserXHR.build();我发现我打了第一个断点一次,但是我从回调中打了第二个断点两次。

这一直驱使我坚强,所以我想检查一下熟悉角度2内部的人是否可以清楚地看出,这是否看起来像一个错误或我做错了的东西。

在我的代码中,我创建了一些抽象的通用服务类:GenericService和FullService,它扩展了GenericService。这两个都是抽象的,并且使用泛型,并且注入到不同组件中的实际服务类都扩展为GenericService或FullService。你们认为这个设置可能会对双重执行时间负责吗?

所有的想法都不胜感激!

提前致谢!

附:

这不会发生在get但它也发生在put。

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

要转换所有你要做的是share它:

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

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...