mirror of https://github.com/lukechilds/docs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
849 B
39 lines
849 B
import { Subject } from './Subject';
|
|
import { Observer } from './Observer';
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|