Promise microtask

프로미스 마이크로태스크

Promise reactions run after the current stack and before the next timer task.

···
html
<div class="v"><header><b>MICROTASK ORDER</b><span id="state"></span></header><main><div class="track" id="track"></div><div class="output" id="output"></div></main><footer>stack → microtask → task</footer></div>
css
.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,3.2vmin,17px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.28} .track{height:60%;display:flex;align-items:center;justify-content:space-around;gap:5px}.job{flex:1;text-align:center;padding:13px 2px;border:1px solid var(--line);border-radius:6px;font:600 .85em ui-monospace,monospace}.output{text-align:center;color:var(--accent);font:600 .9em ui-monospace,monospace}
js
const jobs=["sync","Promise","timer"];let n=0;function draw(){document.getElementById("track").innerHTML=jobs.map((x,i)=>"<div class=\"job "+(i===n?"active":i>n?"muted":"")+"\">"+x+"</div>").join("");document.getElementById("output").textContent="output: "+jobs.slice(0,n+1).join(" → ");document.getElementById("state").textContent=n===1?"microtask":n===2?"task":"stack";n=(n+1)%3}draw();setInterval(draw,900)

A Promise then callback runs from the microtask queue after synchronous code completes. A timer callback enters a later task, so scheduling both in one turn does not make them run together.

A long chain that keeps adding microtasks can delay later tasks and rendering. The demo shows the order of three jobs scheduled together.

When to use

Use it to reason about async output order and delayed UI updates.

Open as page ↗