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/



