diff --git a/packages/runtime-core/__tests__/scheduler.spec.ts b/packages/runtime-core/__tests__/scheduler.spec.ts index 1f7199f6edf..dc9bace9c9c 100644 --- a/packages/runtime-core/__tests__/scheduler.spec.ts +++ b/packages/runtime-core/__tests__/scheduler.spec.ts @@ -534,4 +534,16 @@ describe('scheduler', () => { // should not be called expect(spy).toHaveBeenCalledTimes(0) }) + + it('flushPreFlushCbs inside a pre job', async () => { + const spy = jest.fn() + const job = () => { + spy() + flushPreFlushCbs() + } + job.pre = true + queueJob(job) + await nextTick() + expect(spy).toHaveBeenCalledTimes(1) + }) }) diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index 109541d280b..923f3ec8251 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -133,7 +133,11 @@ export function queuePostFlushCb(cb: SchedulerJobs) { queueFlush() } -export function flushPreFlushCbs(seen?: CountMap, i = flushIndex) { +export function flushPreFlushCbs( + seen?: CountMap, + // if currently flushing, skip the current job itself + i = isFlushing ? flushIndex + 1 : 0 +) { if (__DEV__) { seen = seen || new Map() }