Callback,Promise,async/await
νμ΅ ν€μλ
Callback ν¨μ
Promise
async/await
Callback ν¨μ
λ€λ₯Έν¨μμ λ§€κ°λ³μλ‘ μ λ¬λλ ν¨μλ₯Ό μλ―Έ
μ΄λ€ μμ μ΄ λλκ±°λ μ΄λ²€νΈκ° λ°μνμ λ νΈμΆλλ ν¨μλ₯Ό μλ―Έ
μΌλ°μ μΌλ‘ λΉλκΈ° ν¨μ μ²λ¦¬κ° λλλ©΄ μ€νν μμ μΌλ‘ μ½λ°±ν¨μλ₯Ό μ λ¬
π€ μ½λ°±ν¨μκ° μ¬μ©λλ μ΄μ λ?
μλ°μ€ν¬λ¦½νΈλ λκΈ°μ λ°©μμΌλ‘ νλ²μ νκ°μ§ μΌλ§ μ²λ¦¬νλ€. μ¦, ν¨μκ° νΈμΆ λλ μμλλ‘ μμ°¨μ μΌλ‘ μ½λκ° μ€ν λλ€. κ·Έλ¬λ, λ€νΈμν¬ μμ²κ³Ό κ°μ΄ μκ°μ΄ 걸리λ μμ
μ μν ν΄μΌ νκΈ° λλ¬Έμ νμ¬ μ€ν μ€μΈ μ½λκ° μ’
λ£ λμ§ μμ μνλΌν΄λ κΈ°λ€λ¦¬μ§ μκ³ λ€μ μ½λλ₯Ό λ°λ‘ μ€ννλλ‘ λΉλκΈ° λ°©μμΌλ‘ μ½λλ₯Ό μ€νμν¨λ€. μ΄μ κ°μ΄ μμκ° λ³΄μ₯ λμ§ μλ μν©μμ μμκ° λ³΄μ₯λκ±°λ, λΉλκΈ° ν¨μ μ²λ¦¬κ° λλλ©΄ μ€νν μμ
μ μ½λ°±ν¨μμ μ λ¬νμ¬ μ¬μ©νλ€.
π©π»βπ» μ½λ°±ν¨μ μ¬μ©ν΄λ³΄μ
function task1() {
console.log('첫λ²μ§Έλ‘ μ€νλμ΄μΌ νλ ν¨μ');
}
function task2() {
// β
μμκ° λ³΄μ₯λμ§ μλ ν¨μ λ‘μ§μ΄ μλ€λ©΄?
setTimeout(() => {
console.log('λλ²μ§Έλ‘ μ€νλμ΄μΌ νλ ν¨μ');
}, 2000);
}
function task3() {
console.log('μΈλ²μ§Έλ‘ μ€νλμ΄μΌ νλ ν¨μ');
}
function task4() {
console.log('λ€λ²μ§Έλ‘ μ€νλμ΄μΌ νλ ν¨μ');
}
task1();
task2();
task3();
task4();μμ μ½λλ₯Ό 보면 task2 ν¨μλ΄λΆμλ λΉλκΈ°λ‘ λμνλ ν¨μ setTimeout μ‘΄μ¬νλ€. λ΄κ° μλνλ건 task1 β task2 β task3 β task4 μμΌλ‘ λμνκΈΈ μνλ€. κ·Έλ¬λ task1 β task3 β task4 β task2 μμΌλ‘ λμλμ΄ μλν λ°©ν₯κ³Όλ λ¬λλ€. κ·Έλ λ€λ©΄ μ½λ°±ν¨μλ₯Ό μ¬μ©ν΄μ μμλ₯Ό 보μ₯νλ μ½λλ₯Ό μμ±ν΄λ³΄μ!
π± μ½λ°±μ§μ₯(Callback hell)

λΉλκΈ° ν¨μκ° μ²λ¦¬κ° λλλ©΄ μ€νλμ΄μΌ ν μ½λ°±ν¨μλ€μ΄ μ€μ²©λμ΄ indent(λ€μ¬μ°κΈ°)κ° μ μ κΉμ΄μ§λ ννλ‘ λκ³ μ΄μκ°μ΄ μ½λμ κ°λ μ±μ΄ μμ’μμ§κ² λλ μν©μ
μ½λ°±μ§μ₯,Callback hellμ΄λΌκ³ λΆλ₯Έλ€.
Promise
μ½λ°±ν¨μμ λ¨μ μ 보μνλ©° λΉλκΈ° μ²λ¦¬λ₯Ό λ³΄λ€ ν¨μ¨μ μΌλ‘ μ²λ¦¬νκΈ° μν΄ ES6 μΆκ°λ λ¬Έλ²
μλ°μ€ν¬λ¦½νΈμ νΉμ κ°μ²΄ (
λΉλκΈ° ν¨μμ κ²°κ³Όλ₯Ό λ΄κ³ μλ κ°μ²΄)λκ°μ μ½λ°±ν¨μλ₯Ό μΈμλ‘ μ λ¬λ°λλ°, μμ μ΄ μ±κ³΅μ μΌλ‘ μλ£λμμ λ κ²°κ³Όλ₯Ό λ°ννλ
resolve ν¨μμ μμ μ΄ μ€ν¨νμλ μλ¬λ₯Ό λ°ννλreject ν¨μκ° μλ€.
κΈ°λ³Έ λ¬Έλ²
new ν€μλλ₯Ό ν΅ν΄ μμ±
resolve, rejectλ₯Ό λ§€κ°λ³μλ‘ νλ ν¨μ μ λ¬λ°λλ€.
resolve: λΉλκΈ° μ²λ¦¬κ° μ±κ³΅νμ λ νΈμΆν ν¨μreject: λΉλκΈ° μ²λ¦¬κ° μ€ν¨νμ λ νΈμΆν ν¨μ
π Promise 3κ°μ§ μν
pending(λκΈ°)
new Promise()λ©μλλ‘ νΈμΆνλ©΄ λκΈ° μνκ° λλ€.λΉλκΈ° μ²λ¦¬ λ‘μ§μ΄ μμ§ μλ£ λμ§ μμ μν
fulfilled(μ΄ν)
λΉλκΈ° μμ μ΄ μλ£λμ΄ νλ‘λ―Έμ€κ° κ²°κ³Όκ°μ λ°νν΄μ€ μν
thenμ ν΅ν΄ μ²λ¦¬κ°μ μ λ¬λ°μ μΆκ°μ μΈ μ²λ¦¬ κ°λ₯
rejected(μ€ν¨)
λΉλκΈ° μμ μ΄ μ€ν¨νκ±°λ μ€λ₯κ° λ°μν μν
μ€ν¨μνκ° λλ©΄ μ€ν¨ν μ΄μ λ₯Ό
catchλ‘ λ°μ μ μλ€.
βοΈ Promise 체μ΄λ
Promise κ°μ²΄μ λ©μλλ₯Ό μ°κ²°μ§μ΄ μ¬μ©νλ μν©
π± Promise hellλ μ‘΄μ¬νλ€
μλ μ½λμ κ°μ΄ then λ©μλλ₯Ό ν΅ν΄ κ²°κ³Όκ°μ μΈμλ‘ λ°μμμ μμ μ μννκ³ , λ€μ then λ©μλλ₯Ό νΈμΆνκ³ , λ then,then,... μ κ°μ΄ μμ μ΄ λ¬΄μν κΈΈμ΄μ§κΈ° λλ¬Έμ μ½λ°±μ§μ₯μ μ΄μ΄
νλ‘λ―Έμ€ ν¬μ΄λΌλ ννλ μλ€.
π₯ return νμ©ν΄ Promise hell ν΄κ²°νμ
returnλ‘
promiseκ°μ²΄λ₯Ό λ°νν΄μ μ¬μ©νλ©΄ hellμμ λ²μ΄λ μ μλ€.
Promiseμ μ μ λ©μλ
μ¬λ¬κ°μ λΉλκΈ° μ²λ¦¬λ₯Ό
λ³λ ¬μ μΌλ‘ μ²λ¦¬ν λ μ¬μ©νλ€.κ°κ°μ λΉλκΈ° νΈμΆ μμκ° μκ΄ μμ λ μ¬μ©νλ€.
μ£Όμ΄μ§ νλ‘λ―Έμ€ μ€ νλκ° κ±°λΆνλ κ²½μ°, μ 체λ₯Ό reject μ²λ¦¬νλ€.
μ¬λ¬κ°μ λΉλκΈ° μ²λ¦¬ μ€ κ°μ₯ λ¨Όμ
fulfilledλ μ²λ¦¬ κ²°κ³Όλ₯Ό κ°μ Έμ¬ λ μ¬μ©
μ¬λ¬κ°μ λΉλκΈ° μ²λ¦¬κ° λͺ¨λ
fulfilledλrejectλ μ²λ¦¬ κ²°κ³Όλ₯Ό resolveνλ promiseλ₯Ό λ°ν
async/await
Promiseλ₯Ό μ‘°κΈ λ κ°νΈνκ³ , κ°λ μ± μ’κ² μ¬μ©νκΈ° μν΄ λμ¨ λ¬Έλ²
β async/awaitλ promise λ₯Ό κΈ°λ°μΌλ‘ λμνλ€. promiseμ then,catch,finally νμ μ²λ¦¬ λ©μλμ μ½λ°±ν¨μλ₯Ό μ λ¬ν΄μ λΉλκΈ° μ²λ¦¬ κ²°κ³Όλ₯Ό μ²λ¦¬ν νμ μμ΄ λ§μΉ λκΈ°μ²λΌ νλ‘λ―Έμ€λ₯Ό μ¬μ©ν μ μλ€.
κΈ°λ³Έλ¬Έλ²
ν¨μ μμ
asyncλ₯Ό λΆμ΄λ©΄λΉλκΈ°μ μΈ ν¨μμ΄κ³ , Promiseλ₯Ό λ°ννλ€λΌκ³ μ μΈνκ³ , λ°ν κ°μ΄ Promise μμ±ν¨μκ° μλμ΄λ λ°νλλ κ°μ Promise κ°μ²΄μ λ£λλ€.
awaitμasyncν¨μ μμμλ§ μ¬μ©ν μ μκ³ , Promiseλ₯Ό λ°ννλ ν¨μ μμawaitλ₯Ό λΆμ΄λ©΄ Promiseκ° μ±κ³΅ μν λλ μ€ν¨ μνλ‘ λ°λκΈ° μ κΉμ§λ λ€μ μ°μ°μ νμ§μμ λκΈ°μ μΌλ‘ μλλλ€.
async/await μμΈμ²λ¦¬
Promiseλ νμ μ²λ¦¬κ° λ§μμ§μλ‘ then λ΄λΆμ μ½λκ° μ€μ²©λλ©΄μ μ½λ νλ¦μ΄ 볡μ‘ν΄μ§λ μν©μ 보μνκΈ° μν΄
try/catchμΌλ‘ κ°λ¨ν μ²λ¦¬ ν μ μλ€.
π μ°Έκ³
Last updated