加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Angular2 http.post被执行两次

发布时间:2020-12-17 08:05:13 所属栏目:安全 来源:网络整理
导读:我遇到了一个奇怪的问题,Angular2的(RC1)Http服务执行http.post调用两次。我已经调试了我的应用程序,我知道一个事实,这不是一个点击事件问题。导致核心服务呼叫的所有呼叫 public create(json: Object,params?: Object): ObservableT { let body = JSON.s
我遇到了一个奇怪的问题,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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读