λ€μ΄κ°λ©°
μ½λ°±μ§μ₯μ΄λΌλ κ²μ λ€μ΄λ³Έ μ μ΄ μλμ§?
ES6μ΄ λμ
λκΈ° μ΄μ μ λΉλκΈ° μμ
μ νκΈ° μν΄μλ μ½λ°±ν¨μλ‘ μ²λ¦¬νλ€κ³ νλ€.
λΉλκΈ° μμ
μΌλ‘ μ²λ¦¬ν΄μΌνλ μΌμ΄ λ§μμ§μλ‘ ν¨μκ° μ μ λ κΉμ΄μ§κ² λλλ°,
μ΄λ₯Ό ννλ€ μ½λ°±μ§μ₯, μ½λ°± ν¬ callback hell μ΄λΌκ³ λ€ λΆλ₯Έλ€.
μμ μ§€λ§ λ³΄μλ μΌλ§λ κ°λ μ±μ΄ μ’μ§ μμμ§...π μ°κ²°μ νμ νκΈ°κ° μ½μ§ μλ€λ κ²μ μ μ μλ€.
μ΄λ° μ½λ°± μ§μ₯μ νΌν μ μλ λ°©λ²μ΄ λͺκ°μ§ μλλ°, μ΄ κΈμμλ νλ‘λ―Έμ€ Promiseμ λν΄ μ¨λ³΄κ³ μ νλ€.
νλ‘λ―Έμ€
νλ‘λ―Έμ€λ ES6μμ λμ
λ κ°μ²΄λ‘, λΉλκΈ° μ²λ¦¬ μνμ μ²λ¦¬ κ²°κ³Όλ₯Ό λ°ννλ κ°μ²΄μ΄λ€.
λΉλκΈ° μ²λ¦¬λ₯Ό νμ λ μμ
μ΄ μ±κ³΅μ΄λ , μ€ν¨μ΄λ κ²°κ³Όλ₯Ό λ°νν΄μ€λ€.
μλμ κ°μ ννλ‘ new μ°μ°μλ₯Ό ν΅ν΄ μ μΈν μ μλ€.
const promise = new Promise((resolve, reject) => {
// λΉλκΈ° μ²λ¦¬ μν
if(μ²λ¦¬μ μ±κ³΅νλ 쑰건){
resolve('μ²λ¦¬ μ±κ³΅');
} else{
reject('μ²λ¦¬ μ€ν¨');
}
});
μΈμλ‘ λ°μ λΉλκΈ° μ²λ¦¬λ₯Ό νμ¬ νλ‘λ―Έμ€μ μνμ λ°λΌ μ±κ³΅ν λλ resolve, μ€ν¨ν λλ rejectλ₯Ό νΈμΆνλ€.
νλ‘λ―Έμ€μ μνλ λΉλκΈ° μ²λ¦¬μ μ§νμ¬λΆλ₯Ό 보μ¬μ£Όλ μ 보μΈλ° μλμ²λΌ μΈ κ°μ§ κ²½μ°κ° μλ€.
νλ‘λ―Έμ€μ μν
- Pending (λκΈ°) : λΉλκΈ° μ²λ¦¬ μνμ΄ μμ§ λμ§μμ μν. νλ‘λ―Έμ€μ κΈ°λ³Έ μν.
- Fulfiled (μ±κ³΅) : λΉλκΈ° μ²λ¦¬ μνμ΄ μ±κ³΅ν μν. resolve ν¨μλ₯Ό νΈμΆνλ€.
- rejected (μ€ν¨) : λΉλκΈ° μ²λ¦¬ μνμ΄ μ€ν¨ν μν. reject ν¨μλ₯Ό νΈμΆνλ€.
λΉλκΈ° μ²λ¦¬μ λ°λΌμ νλ‘λ―Έμ€μ μνκ° μ±κ³΅νμ¬ fufilledκ° λμλ€λκ°, μ€ν¨νμ¬ rejectedκ° λμλ€λ©΄ ν¨μκ° νΈμΆλλ€.
νΈμΆλλ ν¨μλ‘ νλ‘λ―Έμ€μ μνκ° κ²°μ λκΈ° λλ¬Έμ μ΄ ν¨μμ λν μ²λ¦¬κ° νμνλ€.
μ΄ ν¨μκ° λΉλκΈ° μ²λ¦¬μ λν νμμ²λ¦¬λ₯Ό νλ€λ μ μμ μ½λ°±μ§μ₯μ ν΄κ²°νλ€κ³ ν μ μλ€.
μ΄λ° μ²λ¦¬μν μ νλ νμ λ©μλλ‘λ μΈ κ°μ§κ° μλ€.
νλ‘λ―Έμ€μ νμ λ©μλ
- .then() : νλ‘λ―Έμ€κ° μ±κ³΅(fufilled)ν μνμΌ λ νΈμΆλλ€.
- .catch() : νλ‘λ―Έμ€κ° μ€ν¨(rejected)ν μνμΌλλ§ νΈμΆλλ€. μλ¬λ₯Ό μ²λ¦¬νλ λ©μλ.
- .fianlly(): λ§μ§λ§μ 곡ν΅μΌλ‘ μ²λ¦¬ν λ΄μ©μ μννλ λ©μλ. ν λ²λ§ νΈμΆλ μ μλ€.
μ μΈ λ©μλλ νμ νλ‘λ―Έμ€λ₯Ό λ°ννλ€λ 곡ν΅μ μ΄ μλ€.
λ λ©μλ체μ΄λμ ν΅ν΄ μ΄μ μ²λ¦¬μ κ°μ μ λ¬λ°μΌλ©° μ°μμ μΌλ‘ νΈμΆν μ μλ€.
νλ‘λ―Έμ€μ νμ λ©μλ 체μ΄λ κ³Όμ μ λμν νλ©΄ μμ κ°μ΄ ννλλ€.
κ°λ¨ μμ
λ©μλ 체μ΄λμΌλ‘ νλ‘λ―Έμ€λ₯Ό κ°λ¨νκ² μ¬μ©ν΄λ³΄μλ€.
const printNumber = (num) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(num);
num++;
if (num <= 5) {
resolve(num);
} else {
reject(`${num}μ 5λ³΄λ€ ν° μ.`);
}
}, 2000);
});
};
printNumber(3)
.then((num) => {
return printNumber(num);
})
.then((num) => {
return printNumber(num);
})
.catch((rej) => console.log(rej))
.finally(() => console.log('λ'));
λΈλΌμ°μ μ½μμμ μ€ννλ©΄ μμ κ°μ΄ 2μ΄μ© λλ μ΄λλ©° κ²°κ³Όκ° λμ¨λ€.
μ΄μ νλ‘λ―Έμ€λ‘ μ½λ°±μ§μ₯μμ λ²μ΄λ μ’ λ λͺ μμ μ΄κ³ κΉλνκ² λΉλκΈ° μ²λ¦¬λ₯Ό ν΄λ³΄μ!~
'π Studying > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JavaScript 30 Days Challenge - Clock (0) | 2022.05.26 |
---|---|
[JavaScript] μ΄λ²€νΈ μ ν bubbling, capturing (3) | 2022.04.28 |
[JavaScript] Fetch API μ¬μ©ν΄λ³΄κΈ° (JSONplaceholder) (3) | 2022.04.26 |
[JavaScript] varμ λ¬Έμ μ (var, let, const) (0) | 2022.04.24 |
String (0) | 2022.04.06 |
Comment