async 함수 안에서 await를 만나면 기다리는 값이 완료될 때까지 함수의 나머지 부분은 실행되지 않습니다. 호출자는 Promise를 즉시 받고 다른 작업을 계속할 수 있습니다.
await가 메인 스레드 전체를 멈추는 것은 아닙니다. 독립적인 요청을 불필요하게 순차 await하면 전체 완료 시간이 늘 수 있으므로 병렬로 시작할 수 있는지 따져야 합니다.
언제 쓰나
Promise 기반 작업을 순서대로 읽히는 코드로 작성할 때 씁니다.
await는 비동기 함수의 나머지를 잠시 미루고 완료 뒤 이어갑니다.
<div class="v"><header><b>AWAIT RESUME</b><span id="state"></span></header><main><div class="lanes"><div class="lane" id="fn"></div><div class="lane" id="other"></div></div></main><footer>caller continues while function waits</footer></div>.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} .lanes{height:100%;display:flex;flex-direction:column;justify-content:center;gap:10px}.lane{height:37%;border:1px solid var(--line);border-radius:6px;padding:6px;display:flex;align-items:center;justify-content:space-around;font:600 .85em ui-monospace,monospace}.lane span{padding:5px;border-radius:4px}.lane .on{background:var(--accent);color:var(--bg)}let n=0;function draw(){const a=["start","await","resume"],b=["caller","other work","done"];document.getElementById("fn").innerHTML=a.map((x,i)=>"<span class=\""+(i===n?"on":"")+"\">"+x+"</span>").join("→");document.getElementById("other").innerHTML=b.map((x,i)=>"<span class=\""+(i===n?"on":"")+"\">"+x+"</span>").join("→");document.getElementById("state").textContent=["invoke","suspended","settled"][n];n=(n+1)%3}draw();setInterval(draw,1000)async 함수 안에서 await를 만나면 기다리는 값이 완료될 때까지 함수의 나머지 부분은 실행되지 않습니다. 호출자는 Promise를 즉시 받고 다른 작업을 계속할 수 있습니다.
await가 메인 스레드 전체를 멈추는 것은 아닙니다. 독립적인 요청을 불필요하게 순차 await하면 전체 완료 시간이 늘 수 있으므로 병렬로 시작할 수 있는지 따져야 합니다.
Promise 기반 작업을 순서대로 읽히는 코드로 작성할 때 씁니다.