Skip to content

Commit b57e995

Browse files
committed
fix(scheduler): handle preFlush cb queued inside postFlush cb
fix #3806
1 parent e8ddf86 commit b57e995

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

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

+10
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,16 @@ describe('scheduler', () => {
230230
await nextTick()
231231
expect(calls).toEqual(['cb1', 'cb2', 'job1'])
232232
})
233+
234+
// #3806
235+
it('queue preFlushCb inside postFlushCb', async () => {
236+
const cb = jest.fn()
237+
queuePostFlushCb(() => {
238+
queuePreFlushCb(cb)
239+
})
240+
await nextTick()
241+
expect(cb).toHaveBeenCalled()
242+
})
233243
})
234244

235245
describe('queuePostFlushCb', () => {

packages/runtime-core/src/scheduler.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,11 @@ function flushJobs(seen?: CountMap) {
260260
currentFlushPromise = null
261261
// some postFlushCb queued jobs!
262262
// keep flushing until it drains.
263-
if (queue.length || pendingPostFlushCbs.length) {
263+
if (
264+
queue.length ||
265+
pendingPreFlushCbs.length ||
266+
pendingPostFlushCbs.length
267+
) {
264268
flushJobs(seen)
265269
}
266270
}

0 commit comments

Comments
 (0)