wip: adjust lifecycle

This commit is contained in:
Evan You
2019-05-28 19:59:54 +08:00
parent 19ed750078
commit 7a3a5850dc
3 changed files with 15 additions and 28 deletions

View File

@@ -1,6 +1,5 @@
const queue: Function[] = []
const postFlushCbs: Function[] = []
const reversePostFlushCbs: Function[] = []
const p = Promise.resolve()
let isFlushing = false
@@ -20,32 +19,16 @@ export function queueJob(job: () => void, onError?: (err: Error) => void) {
}
export function queuePostFlushCb(cb: Function | Function[]) {
queuePostCb(cb, postFlushCbs)
}
export function queueReversePostFlushCb(cb: Function | Function[]) {
queuePostCb(cb, reversePostFlushCbs)
}
function queuePostCb(cb: Function | Function[], queue: Function[]) {
if (Array.isArray(cb)) {
queue.push.apply(postFlushCbs, cb)
postFlushCbs.push.apply(postFlushCbs, cb)
} else {
queue.push(cb)
postFlushCbs.push(cb)
}
}
const dedupe = (cbs: Function[]): Function[] => Array.from(new Set(cbs))
export function flushPostFlushCbs() {
if (reversePostFlushCbs.length) {
const cbs = dedupe(reversePostFlushCbs)
reversePostFlushCbs.length = 0
let i = cbs.length
while (i--) {
cbs[i]()
}
}
if (postFlushCbs.length) {
const cbs = dedupe(postFlushCbs)
postFlushCbs.length = 0