Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I unsubscribe from Cold Observable?

Tags:

angular

rxjs

I know that it's good practice to unsubscribe from Observable to prevent memory leak.

But if it's Cold Observable should I also unsubscribe from it?

For example one that is returned by Http.get()

like image 771
Stepan Suvorov Avatar asked Jan 04 '23 14:01

Stepan Suvorov


1 Answers

You don't need to do it. The HTTP observable is calling complete immediately after the action is done.

From the source code sources I can see that unsubscribe is called on error and on complete.

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

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

I went further and did a small experiment by adding unsubscribe with a timeout

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

If I step inside of unsubscribe to

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

then this.closed == true, which means unsubscribe was called before.

So yes, now I can say for sure you don't need to unsubscribe :)

like image 126
Vova Bilyachat Avatar answered Jan 18 '23 17:01

Vova Bilyachat