UNPKG

lume

Version:

Build next-level interactive web applications.

34 lines 923 B
const tasks = new Set(); let microtask = false; /** * Like queueMicrotask, except it will not allow the same function to be queued * more than once. * * Example: * * ```js * const logFoo = () => console.log('foo') * * // "foo" will be logged one time in the next microtask. * queueMicrotaskOnceOnly(logFoo) * queueMicrotaskOnceOnly(logFoo) * queueMicrotaskOnceOnly(logFoo) * queueMicrotaskOnceOnly(logFoo) * ``` */ export function queueMicrotaskOnceOnly(task) { tasks.add(task); if (microtask) return; microtask = true; queueMicrotask(() => { microtask = false; // Grab the items, then clear the set before running tasks, so that we // allow tasks to queue again for the next microtask. const _tasks = [...tasks]; tasks.clear(); for (const task of _tasks) task(); }); } //# sourceMappingURL=queueMicrotaskOnceOnly.js.map