let sign = false; function flushQueue(queue: Array) { sign = true; Promise.resolve().then(() => { queue.forEach((target) => { target.update(); }); sign = false; }); } let queue: Array = []; export default function nextTick(target: T) { if (queue.indexOf(target) === -1) { queue.push(target); } if (!sign) { flushQueue(queue.splice(0)); } }