소스 검색

fix(runtime-core/scheduler): prevent duplicate queue (#1767)

Yang Mingshan 5 년 전
부모
커밋
b2a91429ed
2개의 변경된 파일13개의 추가작업 그리고 1개의 파일을 삭제
  1. 12 0
      packages/runtime-core/__tests__/scheduler.spec.ts
  2. 1 1
      packages/runtime-core/src/scheduler.ts

+ 12 - 0
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)
+  })
 })

+ 1 - 1
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