File tree Expand file tree Collapse file tree 3 files changed +57
-0
lines changed Expand file tree Collapse file tree 3 files changed +57
-0
lines changed Original file line number Diff line number Diff line change @@ -128,6 +128,7 @@ import './operator/zipAll';
128
128
import { Subject } from './Subject' ;
129
129
import { Subscription } from './Subscription' ;
130
130
import { Subscriber } from './Subscriber' ;
131
+ import { AsyncSubject } from './subject/AsyncSubject' ;
131
132
import { ReplaySubject } from './subject/ReplaySubject' ;
132
133
import { BehaviorSubject } from './subject/BehaviorSubject' ;
133
134
import { ConnectableObservable } from './observable/ConnectableObservable' ;
@@ -156,6 +157,7 @@ export {
156
157
Observable ,
157
158
Subscriber ,
158
159
Subscription ,
160
+ AsyncSubject ,
159
161
ReplaySubject ,
160
162
BehaviorSubject ,
161
163
ConnectableObservable ,
Original file line number Diff line number Diff line change @@ -104,6 +104,7 @@ import './operator/zipAll';
104
104
import { Subject } from './Subject' ;
105
105
import { Subscription } from './Subscription' ;
106
106
import { Subscriber } from './Subscriber' ;
107
+ import { AsyncSubject } from './subject/AsyncSubject' ;
107
108
import { ReplaySubject } from './subject/ReplaySubject' ;
108
109
import { BehaviorSubject } from './subject/BehaviorSubject' ;
109
110
import { ConnectableObservable } from './observable/ConnectableObservable' ;
@@ -129,6 +130,7 @@ export {
129
130
Observable ,
130
131
Subscriber ,
131
132
Subscription ,
133
+ AsyncSubject ,
132
134
ReplaySubject ,
133
135
BehaviorSubject ,
134
136
ConnectableObservable ,
Original file line number Diff line number Diff line change
1
+ import { Subject } from '../Subject' ;
2
+ import { Subscriber } from '../Subscriber' ;
3
+ import { Subscription } from '../Subscription' ;
4
+
5
+ export class AsyncSubject < T > extends Subject < T > {
6
+ _value : T = void 0 ;
7
+ _hasNext : boolean = false ;
8
+ _isScalar : boolean = false ;
9
+
10
+ constructor ( ) {
11
+ super ( ) ;
12
+ }
13
+
14
+ _subscribe ( subscriber : Subscriber < any > ) : Subscription < T > {
15
+ const subscription = super . _subscribe ( subscriber ) ;
16
+ if ( ! subscription ) {
17
+ return ;
18
+ } else if ( ! subscription . isUnsubscribed && this . _hasNext ) {
19
+ subscriber . next ( this . _value ) ;
20
+ subscriber . complete ( ) ;
21
+ }
22
+ return subscription ;
23
+ }
24
+
25
+ _next ( value : T ) : void {
26
+ this . _value = value ;
27
+ this . _hasNext = true ;
28
+ }
29
+
30
+ _complete ( ) : void {
31
+ let index = - 1 ;
32
+ const observers = this . observers ;
33
+ const len = observers . length ;
34
+
35
+ // optimization -- block next, complete, and unsubscribe while dispatching
36
+ this . observers = void 0 ; // optimization
37
+ this . isUnsubscribed = true ;
38
+
39
+ if ( this . _hasNext ) {
40
+ while ( ++ index < len ) {
41
+ let o = observers [ index ] ;
42
+ o . next ( this . _value ) ;
43
+ o . complete ( ) ;
44
+ }
45
+ } else {
46
+ while ( ++ index < len ) {
47
+ observers [ index ] . complete ( ) ;
48
+ }
49
+ }
50
+
51
+ this . isUnsubscribed = false ;
52
+ }
53
+ }
You can’t perform that action at this time.
0 commit comments