From af9560455d9719a4c5f0d6588d04bfb4c06c8654 Mon Sep 17 00:00:00 2001 From: underfin Date: Mon, 9 Nov 2020 22:19:32 +0800 Subject: [PATCH] fix(runtime-core): ensure scheduler queue is always non-null (#2567) fix https://github.com/vitejs/vite/issues/1021 --- packages/runtime-core/src/scheduler.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index 32fce93c..e2781f97 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -30,7 +30,7 @@ export type SchedulerCbs = SchedulerCb | SchedulerCb[] let isFlushing = false let isFlushPending = false -const queue: (SchedulerJob | null)[] = [] +const queue: SchedulerJob[] = [] let flushIndex = 0 const pendingPreFlushCbs: SchedulerCb[] = [] @@ -87,7 +87,7 @@ function queueFlush() { export function invalidateJob(job: SchedulerJob) { const i = queue.indexOf(job) if (i > -1) { - queue[i] = null + queue.splice(i, 1) } } @@ -205,9 +205,7 @@ function flushJobs(seen?: CountMap) { // priority number) // 2. If a component is unmounted during a parent component's update, // its update can be skipped. - // Jobs can never be null before flush starts, since they are only invalidated - // during execution of another flushed job. - queue.sort((a, b) => getId(a!) - getId(b!)) + queue.sort((a, b) => getId(a) - getId(b)) try { for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {