微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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();

原文地址:https://www.jb51.cc/angularjs/144076.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐