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

棱角分明 – 我应该取消订阅Cold Observable吗?

发布时间:2020-12-17 18:10:01 所属栏目:安全 来源:网络整理
导读:我知道取消订阅Observable以防止内存泄漏是一种很好的做法. 但如果它是Cold Observable,我还应该取消订阅吗? 例如,由Http.get()返回的一个 解决方法 你不需要这样做因为HTTP observable在动作完成后立即调用完成. 从源代码sources我可以看到在取消订阅时调
我知道取消订阅Observable以防止内存泄漏是一种很好的做法.

但如果它是Cold Observable,我还应该取消订阅吗?

例如,由Http.get()返回的一个

解决方法

你不需要这样做因为HTTP observable在动作完成后立即调用完成.

从源代码sources我可以看到在取消订阅时调用错误和完成.

protected _error(err: any): void {
    this.destination.error(err);
    this.unsubscribe();
  }

  protected _complete(): void {
    this.destination.complete();
    this.unsubscribe();
  }

我进一步做了一个小实验,添加了取消订阅超时

var subscription = this.http.get(`apiurl`)
            .subscribe(response => {
                setTimeout(function(){ 
                    debugger;
                    subscription.unsubscribe(); },30);
            });

如果我介入取消订阅

Subscriber.prototype.unsubscribe = function () {
        if (this.closed) { // this.closed is true
            return;
        }
        this.isStopped = true;
        _super.prototype.unsubscribe.call(this);
    };

然后this.closed == true,这意味着之前调用了取消订阅.

所以是的,现在我可以肯定地说你不需要取消订阅:)

(编辑:李大同)

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

    推荐文章
      热点阅读