fix(runtime-core): ensure scheduler queue is always non-null (#2567)

fix https://github.com/vitejs/vite/issues/1021
This commit is contained in:
underfin 2020-11-09 22:19:32 +08:00 committed by GitHub
parent b5926ff9f0
commit af9560455d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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++) {