Hint
Schedule a function in the microtask queue — runs after current sync, before next macrotask
queueMicrotask(fn) adds a callback directly to the microtask queue — the same queue that Promise callbacks use.
// Functionally equivalent:
Promise.resolve().then(() => console.log('A'));
queueMicrotask(() => console.log('B'));
// A, B — FIFO within the microtask queue
console.log('sync');
queueMicrotask(() => console.log('microtask'));
setTimeout(() => console.log('macrotask'), 0);
console.log('sync end');
// Order: sync → sync end → microtask → macrotask
Advantages over Promise.resolve().then():
// Real use case: batch state updates
let pending = false;
function scheduleRender() {
if (pending) return;
pending = true;
queueMicrotask(() => {
pending = false;
renderDOM(); // runs once after all sync mutations
});
}