import { Subject } from './Subject';
|
import { Observer } from './types';
|
import { Subscription } from './Subscription';
|
|
/**
|
* We need this JSDoc comment for affecting ESDoc.
|
* @ignore
|
* @extends {Ignored}
|
*/
|
export class SubjectSubscription<T> extends Subscription {
|
closed: boolean = false;
|
|
constructor(public subject: Subject<T>, public subscriber: Observer<T>) {
|
super();
|
}
|
|
unsubscribe() {
|
if (this.closed) {
|
return;
|
}
|
|
this.closed = true;
|
|
const subject = this.subject;
|
const observers = subject.observers;
|
|
this.subject = null;
|
|
if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
|
return;
|
}
|
|
const subscriberIndex = observers.indexOf(this.subscriber);
|
|
if (subscriberIndex !== -1) {
|
observers.splice(subscriberIndex, 1);
|
}
|
}
|
}
|