From: Evan You Date: Wed, 26 May 2021 18:21:49 +0000 (-0400) Subject: fix(scheduler): handle preFlush cb queued inside postFlush cb X-Git-Tag: v3.1.0-beta.5~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b57e995edd29eff685aeaf40712e0e029073d1cb;p=thirdparty%2Fvuejs%2Fcore.git fix(scheduler): handle preFlush cb queued inside postFlush cb fix #3806 --- diff --git a/packages/runtime-core/__tests__/scheduler.spec.ts b/packages/runtime-core/__tests__/scheduler.spec.ts index 3d95be5edb..953f928158 100644 --- a/packages/runtime-core/__tests__/scheduler.spec.ts +++ b/packages/runtime-core/__tests__/scheduler.spec.ts @@ -230,6 +230,16 @@ describe('scheduler', () => { await nextTick() expect(calls).toEqual(['cb1', 'cb2', 'job1']) }) + + // #3806 + it('queue preFlushCb inside postFlushCb', async () => { + const cb = jest.fn() + queuePostFlushCb(() => { + queuePreFlushCb(cb) + }) + await nextTick() + expect(cb).toHaveBeenCalled() + }) }) describe('queuePostFlushCb', () => { diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index 8ab5a23108..5729afbbec 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -260,7 +260,11 @@ function flushJobs(seen?: CountMap) { currentFlushPromise = null // some postFlushCb queued jobs! // keep flushing until it drains. - if (queue.length || pendingPostFlushCbs.length) { + if ( + queue.length || + pendingPreFlushCbs.length || + pendingPostFlushCbs.length + ) { flushJobs(seen) } }