Skip to content

Commit 801f282

Browse files
committed
fix(AsyncSubject): do not allow change value after complete
closes #1800
1 parent 75a355f commit 801f282

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

spec/subjects/AsyncSubject-spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,21 @@ describe('AsyncSubject', () => {
7979
expect(observer.results).to.deep.equal([2, 'done']);
8080
});
8181

82+
it('should not allow change value after complete', () => {
83+
const subject = new AsyncSubject();
84+
const observer = new TestObserver();
85+
const otherObserver = new TestObserver();
86+
subject.subscribe(observer);
87+
88+
subject.next(1);
89+
expect(observer.results).to.deep.equal([]);
90+
subject.complete();
91+
expect(observer.results).to.deep.equal([1, 'done']);
92+
subject.next(2);
93+
subject.subscribe(otherObserver);
94+
expect(otherObserver.results).to.deep.equal([1, 'done']);
95+
});
96+
8297
it('should not emit values if unsubscribed before complete', () => {
8398
const subject = new AsyncSubject();
8499
const observer = new TestObserver();

src/AsyncSubject.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ import {Subscription} from './Subscription';
66
* @class AsyncSubject<T>
77
*/
88
export class AsyncSubject<T> extends Subject<T> {
9-
value: T = null;
10-
11-
hasNext: boolean = false;
12-
13-
hasCompleted: boolean = false;
9+
private value: T = null;
10+
private hasNext: boolean = false;
11+
private hasCompleted: boolean = false;
1412

1513
protected _subscribe(subscriber: Subscriber<any>): Subscription {
1614
if (this.hasCompleted && this.hasNext) {
@@ -26,8 +24,10 @@ export class AsyncSubject<T> extends Subject<T> {
2624
}
2725

2826
next(value: T): void {
29-
this.value = value;
30-
this.hasNext = true;
27+
if (!this.hasCompleted) {
28+
this.value = value;
29+
this.hasNext = true;
30+
}
3131
}
3232

3333
complete(): void {

0 commit comments

Comments
 (0)