4
4
*/
5
5
6
6
import {
7
+ asapScheduler ,
7
8
ConnectableObservable ,
8
9
MonoTypeOperatorFunction ,
9
10
NEVER ,
@@ -19,7 +20,7 @@ import { scan, switchMap, tap } from "rxjs/operators";
19
20
20
21
export function refCountAuditTime < T > (
21
22
duration : number ,
22
- scheduler ? : SchedulerLike
23
+ scheduler : SchedulerLike = asapScheduler
23
24
) : MonoTypeOperatorFunction < T > {
24
25
25
26
return ( source : Observable < T > ) => {
@@ -32,31 +33,39 @@ export function refCountAuditTime<T>(
32
33
// https://github.com/ReactiveX/rxjs/issues/171#issuecomment-267881847
33
34
34
35
const connectable : ConnectableObservable < T > = source as any ;
35
- let subscription : Subscription | null = null ;
36
+ let connectableSubscription : Subscription | null = null ;
37
+ let connectorSubscription : Subscription | null = null ;
36
38
37
39
const notifier = new Subject < number > ( ) ;
38
40
const connector = notifier . pipe (
39
41
scan ( ( count , step ) => count + step , 0 ) ,
40
42
switchMap ( count => {
41
- switch ( count ) {
42
- case 0 :
43
+ if ( count === 0 ) {
43
44
return timer ( duration , scheduler ) . pipe ( tap ( ( ) => {
44
- subscription ! . unsubscribe ( ) ;
45
- subscription = null ;
45
+ if ( connectableSubscription ) {
46
+ connectableSubscription . unsubscribe ( ) ;
47
+ connectableSubscription = null ;
48
+ }
49
+ if ( connectorSubscription ) {
50
+ connectorSubscription . unsubscribe ( ) ;
51
+ connectorSubscription = null ;
52
+ }
46
53
} ) ) ;
47
- case 1 :
54
+ }
55
+ if ( ! connectableSubscription && ( count > 0 ) ) {
48
56
return timer ( 0 , scheduler ) . pipe ( tap ( ( ) => {
49
- subscription ! . add ( connectable . connect ( ) ) ;
57
+ if ( ! connectableSubscription ) {
58
+ connectableSubscription = connectable . connect ( ) ;
59
+ }
50
60
} ) ) ;
51
- default :
52
- return NEVER ;
53
61
}
62
+ return NEVER ;
54
63
} )
55
64
) ;
56
65
57
66
return using( ( ) => {
58
- if ( subscription === null ) {
59
- subscription = connector . subscribe ( ) ;
67
+ if ( ! connectorSubscription ) {
68
+ connectorSubscription = connector . subscribe ( ) ;
60
69
}
61
70
notifier . next ( 1 ) ;
62
71
return { unsubscribe : ( ) => notifier . next ( - 1 ) } ;
0 commit comments