fix: fix scheduler dupe invokes

This commit is contained in:
Evan You
2018-09-24 13:38:54 -04:00
parent f398c129e6
commit 75bfa80997
3 changed files with 18 additions and 24 deletions

View File

@@ -2,7 +2,7 @@ const queue: Array<() => void> = []
const postFlushCbs: Array<() => void> = []
const p = Promise.resolve()
let flushing = false
let hasPendingFlush = false
export function nextTick(fn?: () => void): Promise<void> {
return p.then(fn)
@@ -10,22 +10,18 @@ export function nextTick(fn?: () => void): Promise<void> {
export function queueJob(job: () => void, postFlushCb?: () => void) {
if (queue.indexOf(job) === -1) {
if (flushing) {
job()
} else {
queue.push(job)
queue.push(job)
if (!hasPendingFlush) {
hasPendingFlush = true
nextTick(flushJobs)
}
}
if (postFlushCb) {
if (postFlushCb && postFlushCbs.indexOf(postFlushCb) === -1) {
postFlushCbs.push(postFlushCb)
}
if (!flushing) {
nextTick(flushJobs)
}
}
function flushJobs() {
flushing = true
let job
while ((job = queue.shift())) {
job()
@@ -33,5 +29,5 @@ function flushJobs() {
while ((job = postFlushCbs.shift())) {
job()
}
flushing = false
hasPendingFlush = false
}