File tree 2 files changed +32
-2
lines changed
2 files changed +32
-2
lines changed Original file line number Diff line number Diff line change 4
4
queuePostFlushCb ,
5
5
invalidateJob ,
6
6
queuePreFlushCb ,
7
- flushPreFlushCbs
7
+ flushPreFlushCbs ,
8
+ flushPostFlushCbs
8
9
} from '../src/scheduler'
9
10
10
11
describe ( 'scheduler' , ( ) => {
@@ -505,4 +506,24 @@ describe('scheduler', () => {
505
506
await nextTick ( )
506
507
expect ( count ) . toBe ( 1 )
507
508
} )
509
+
510
+ // #1947 flushPostFlushCbs should handle nested calls
511
+ // e.g. app.mount inside app.mount
512
+ test ( 'flushPostFlushCbs' , async ( ) => {
513
+ let count = 0
514
+
515
+ const queueAndFlush = ( hook : Function ) => {
516
+ queuePostFlushCb ( hook )
517
+ flushPostFlushCbs ( )
518
+ }
519
+
520
+ queueAndFlush ( ( ) => {
521
+ queueAndFlush ( ( ) => {
522
+ count ++
523
+ } )
524
+ } )
525
+
526
+ await nextTick ( )
527
+ expect ( count ) . toBe ( 1 )
528
+ } )
508
529
} )
Original file line number Diff line number Diff line change @@ -151,8 +151,16 @@ export function flushPreFlushCbs(
151
151
152
152
export function flushPostFlushCbs ( seen ?: CountMap ) {
153
153
if ( pendingPostFlushCbs . length ) {
154
- activePostFlushCbs = [ ...new Set ( pendingPostFlushCbs ) ]
154
+ const deduped = [ ...new Set ( pendingPostFlushCbs ) ]
155
155
pendingPostFlushCbs . length = 0
156
+
157
+ // #1947 already has active queue, nested flushPostFlushCbs call
158
+ if ( activePostFlushCbs ) {
159
+ activePostFlushCbs . push ( ...deduped )
160
+ return
161
+ }
162
+
163
+ activePostFlushCbs = deduped
156
164
if ( __DEV__ ) {
157
165
seen = seen || new Map ( )
158
166
}
@@ -167,6 +175,7 @@ export function flushPostFlushCbs(seen?: CountMap) {
167
175
if ( __DEV__ ) {
168
176
checkRecursiveUpdates ( seen ! , activePostFlushCbs [ postFlushIndex ] )
169
177
}
178
+ console . log ( postFlushIndex )
170
179
activePostFlushCbs [ postFlushIndex ] ( )
171
180
}
172
181
activePostFlushCbs = null
You can’t perform that action at this time.
0 commit comments