let isFlushPending = false const resolvedPromise = Promise.resolve() as Promise let currentFlushPromise: Promise | null = null const pendingPreFlushCbs: Function[] = [] export function queuePreFlushCb(cb: Function) { queueCb(cb, pendingPreFlushCbs) } function queueCb(cb: Function, pendingQueue: Function[]) { pendingQueue.push(cb) queueFlush() } function queueFlush() { if (!isFlushPending) { isFlushPending = true currentFlushPromise = resolvedPromise.then(flushJobs) } } function flushJobs() { isFlushPending = false flushPreFlushCbs() } export function flushPreFlushCbs() { if (pendingPreFlushCbs.length) { //拷贝去重,类似深拷贝 let activePreFlushCbs = [...new Set(pendingPreFlushCbs)] pendingPreFlushCbs.length = 0 for (let i = 0; i < activePreFlushCbs.length; i++) { activePreFlushCbs[i]() } } }