| 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); |
| } |
| } |
| } |