File tree 2 files changed +12
-18
lines changed
2 files changed +12
-18
lines changed Original file line number Diff line number Diff line change @@ -29,20 +29,14 @@ unstable_replaceInternalFunction(
29
29
} ,
30
30
) ;
31
31
32
- const callbackStack = [ new Set < ( ) => void > ( ) ] ;
33
- let callbackPromise : Promise < void > | undefined ;
32
+ const callbackStack : Set < ( ) => void > [ ] = [ ] ;
34
33
35
34
const registerCallback = ( callback : ( ) => void ) => {
36
- const callbacks = callbackStack [ callbackStack . length - 1 ] ! ;
37
- callbacks . add ( callback ) ;
38
- if ( ! callbackPromise && callbackStack . length === 1 ) {
39
- callbackPromise = Promise . resolve ( ) . then ( ( ) => {
40
- callbackPromise = undefined ;
41
- for ( const callback of callbacks ) {
42
- callback ( ) ;
43
- }
44
- callbacks . clear ( ) ;
45
- } ) ;
35
+ if ( callbackStack . length ) {
36
+ callbackStack [ callbackStack . length - 1 ] ! . add ( callback ) ;
37
+ } else {
38
+ // invoke immediately
39
+ callback ( ) ;
46
40
}
47
41
} ;
48
42
Original file line number Diff line number Diff line change @@ -37,13 +37,10 @@ describe('watch', () => {
37
37
} ) ;
38
38
expect ( data ) . toEqual ( [ 0 ] ) ;
39
39
++ state . nested . count ;
40
- await new Promise < void > ( ( r ) => setTimeout ( r ) ) ;
41
40
expect ( data ) . toEqual ( [ 0 , 1 ] ) ;
42
41
++ state . count ;
43
- await new Promise < void > ( ( r ) => setTimeout ( r ) ) ;
44
42
expect ( data ) . toEqual ( [ 0 , 1 ] ) ;
45
43
++ state . nested . anotherCount ;
46
- await new Promise < void > ( ( r ) => setTimeout ( r ) ) ;
47
44
expect ( data ) . toEqual ( [ 0 , 1 ] ) ;
48
45
unwatch ( ) ;
49
46
} ) ;
@@ -59,16 +56,19 @@ describe('watch with batch', () => {
59
56
expect ( data ) . toEqual ( [ 0 ] ) ;
60
57
batch ( ( ) => {
61
58
++ state . count ;
59
+ ++ state . count ;
62
60
} ) ;
63
- expect ( data ) . toEqual ( [ 0 , 1 ] ) ;
61
+ expect ( data ) . toEqual ( [ 0 , 2 ] ) ;
64
62
batch ( ( ) => {
65
63
++ state . count ;
64
+ ++ state . count ;
66
65
} ) ;
67
- expect ( data ) . toEqual ( [ 0 , 1 , 2 ] ) ;
66
+ expect ( data ) . toEqual ( [ 0 , 2 , 4 ] ) ;
68
67
unwatch ( ) ;
69
68
batch ( ( ) => {
70
69
++ state . count ;
70
+ ++ state . count ;
71
71
} ) ;
72
- expect ( data ) . toEqual ( [ 0 , 1 , 2 ] ) ;
72
+ expect ( data ) . toEqual ( [ 0 , 2 , 4 ] ) ;
73
73
} ) ;
74
74
} ) ;
You can’t perform that action at this time.
0 commit comments