]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-core/scheduler): prevent duplicate queue (#1767)
authorYang Mingshan <y.mingshan3@gmail.com>
Mon, 3 Aug 2020 21:19:06 +0000 (05:19 +0800)
committerGitHub <noreply@github.com>
Mon, 3 Aug 2020 21:19:06 +0000 (17:19 -0400)
packages/runtime-core/__tests__/scheduler.spec.ts
packages/runtime-core/src/scheduler.ts

index 80ba290eb647a99ad28d56dd99c84a9b4bdcbba4..cf83e169e78dd229663998ef61a31abc7690e1a9 100644 (file)
@@ -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)
+  })
 })
index cbfedf0a07ce68d8fdb2ed54f7e04a381232e04c..c45113d89c53fff0e03f7a56cff9a9bdcda88d83 100644 (file)
@@ -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