Skip to content

Commit 36fa42a

Browse files
committed
fix(runtime-core/scheduler): handle nested flushPostFlushCbs calls
fix #1947
1 parent 499bc0b commit 36fa42a

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

packages/runtime-core/__tests__/scheduler.spec.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import {
44
queuePostFlushCb,
55
invalidateJob,
66
queuePreFlushCb,
7-
flushPreFlushCbs
7+
flushPreFlushCbs,
8+
flushPostFlushCbs
89
} from '../src/scheduler'
910

1011
describe('scheduler', () => {
@@ -505,4 +506,24 @@ describe('scheduler', () => {
505506
await nextTick()
506507
expect(count).toBe(1)
507508
})
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+
})
508529
})

packages/runtime-core/src/scheduler.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,16 @@ export function flushPreFlushCbs(
151151

152152
export function flushPostFlushCbs(seen?: CountMap) {
153153
if (pendingPostFlushCbs.length) {
154-
activePostFlushCbs = [...new Set(pendingPostFlushCbs)]
154+
const deduped = [...new Set(pendingPostFlushCbs)]
155155
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
156164
if (__DEV__) {
157165
seen = seen || new Map()
158166
}
@@ -167,6 +175,7 @@ export function flushPostFlushCbs(seen?: CountMap) {
167175
if (__DEV__) {
168176
checkRecursiveUpdates(seen!, activePostFlushCbs[postFlushIndex])
169177
}
178+
console.log(postFlushIndex)
170179
activePostFlushCbs[postFlushIndex]()
171180
}
172181
activePostFlushCbs = null

0 commit comments

Comments
 (0)