Blog

async-await

async-await

Node.jsλŠ” JavaScriptλ₯Ό μ‚¬μš©ν•˜λ©° Non-block I/O, 단일 μŠ€λ ˆλ“œ 이벀트 루프λ₯Ό μ‚¬μš©ν•˜μ—¬ 높은 퍼포먼슀λ₯Ό μžλž‘ν•˜λŠ” 언어이닀.
Node.js둜 비동기식 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ μ•„λž˜μ™€ 같은 μ½”λ“œκ°€ λ‚˜μ˜¨λ‹€
request('http://naver.com', (error, response, body) => { success(body) })
JavaScript
볡사
callback이 μœ„μ™€ 같이 λ‹¨μˆœν•˜λ‹€λ©΄ 크게 λ¬Έμ œκ°€ μ—†μœΌλ©°, 점점 μš”κ΅¬μ‚¬ν•­μ΄ λ³΅μž‘ν•΄μ§€λ©΄μ„œ Callback Hell 이 μ‹œμž‘λœλ‹€
request('http://naver.com', (error1, resp1, body1) => { request('http://google.com', (error2, resp2, body2) => { request('http://daum.net', (error3, resp3, body3) => { success(body1, body2, body3) }) }) })
JavaScript
볡사
λ‹Ήμž₯ μœ„μ˜ μ½”λ“œλ§Œ 봐도 ꡉμž₯히 닡닡함을 λŠλ‚„ 수 μžˆλ‹€. μ΄λŸ¬ν•œ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ§Žμ€ μ›€μ§μž„λ“€μ΄ μžˆμ—ˆκ³ , 2014λ…„ μ°¨κΈ° ES6 μžλ°”μŠ€ν¬λ¦½νŠΈ κ·œκ²©μ— Promises/A+ μŠ€νŽ™μ΄ ν™•μ •λ˜λ©΄μ„œ μ–΄λŠμ •λ„ ν•΄κ²°λ˜μ—ˆλ‹€
Promise.all([ request('http://naver.com'), request('http://google.com'), request('http://daum.net') ]).then(success, error)
JavaScript
볡사
ν•˜μ§€λ§Œ, 더 λ³΅μž‘ν•œ 둜직의 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜λ‹€λ³΄λ©΄ Promise 도 λ³΅μž‘ν•΄μ Έμ„œ μ½”λ“œ 읽기가 ꡉμž₯히 νž˜λ“€μ–΄μ§€λŠ” 상황이 μ™”λ‹€.
μ΄λŸ¬ν•œ 상황을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ C# μ—μ„œ 비동기 톡신을 κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©ν•˜λŠ” Async/Await 문법을 JavaScript에 λ„μž…ν•˜κΈ°λ‘œ ν–ˆκ³ , Node.js 7.6+ λΆ€ν„° μ •μ‹μœΌλ‘œ μ§€μ›ν•˜κ³  μžˆλ‹€.
async function doComplicateJob() { const naver = await request('http://naver.com') const google = await request('http://google.com') const daum = await request('http://daum.net') console.log(daum) return {naver, google, daum} } doComplicateJob().then(success, error)
JavaScript
볡사
async-await의 λ³Έμ§ˆμ€ Promise 이닀. async μ§€μ‹œμžκ°€ 뢙은 ν•¨μˆ˜λŠ” λ°˜λ“œμ‹œ Promiseλ₯Ό λ°˜ν™˜ν•œλ‹€.
λ˜ν•œ await μ§€μ‹œμžκ°€ 뢙은 PromiseλŠ” <Pending> μƒνƒœμ—μ„œ <Resolved> ν˜Ήμ€ <Rejected> 둜 μƒνƒœκ°€ λ³€ν™”ν•  λ•Œ κΉŒμ§€ κΈ°λ‹€λ €μ€€λ‹€.
async-awaitλ₯Ό μ‚¬μš©ν•œλ‹€κ³  Synchronize λ™μž‘ν•˜λŠ”κ²ƒμ€ μ•„λ‹ˆμ§€λ§Œ, 마치 동기식 μ½”λ“œμΈκ²ƒμ²˜λŸΌ 읽을 수 있게 λœλ‹€.
이전에 10쀑 Callback Hell을 맛보고 λ‚˜μ„œ, μ–΄λ–»κ²Œ ν•΄μ•Ό κΉ”λ”ν•˜κ²Œ μž‘μ„±ν•  수 μžˆμ„κΉŒ κ³ λ―Όν•˜κ³  μžˆμ—ˆλŠ”λ° Promise 와 async/awaitλ₯Ό μ‚¬μš©ν•΄λ³΄λ‹ˆ 이전에 λΉ„ν•΄ 훨씬 κΉ”λ”ν•˜κ²Œ μž‘μ„±ν•  수 있게 λ˜μ—ˆλ‹€.

μ°Έκ³ 

β€’
http://tc39.github.io/ecmascript-asyncawait/