From: Yang Mingshan Date: Mon, 3 Aug 2020 21:19:06 +0000 (+0800) Subject: fix(runtime-core/scheduler): prevent duplicate queue (#1767) X-Git-Tag: v3.0.0-rc.6~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b2a91429ede9ea49e4808de2748da19deeb7f335;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-core/scheduler): prevent duplicate queue (#1767) --- diff --git a/packages/runtime-core/__tests__/scheduler.spec.ts b/packages/runtime-core/__tests__/scheduler.spec.ts index 80ba290eb6..cf83e169e7 100644 --- a/packages/runtime-core/__tests__/scheduler.spec.ts +++ b/packages/runtime-core/__tests__/scheduler.spec.ts @@ -353,4 +353,16 @@ describe('scheduler', () => { await nextTick() expect(count).toBe(5) }) + + test('should prevent duplicate queue', async () => { + let count = 0 + const job = () => { + count++ + } + job.cb = true + queueJob(job) + queueJob(job) + await nextTick() + expect(count).toBe(1) + }) }) diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index cbfedf0a07..c45113d89c 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -45,7 +45,7 @@ export function queueJob(job: SchedulerJob) { // ensure it doesn't end up in an infinite loop. if ( !queue.length || - !queue.includes(job, job.cb ? flushIndex + 1 : flushIndex) + !queue.includes(job, isFlushing && job.cb ? flushIndex + 1 : flushIndex) ) { queue.push(job) if ((job.id as number) < 0) hasPendingPreFlushJobs = true