Promiseμ λνμ¬
νλ‘λ―Έμ€μ λν΄ μμλ³Έ κΈμ λλ€.
μ΄λ²μ μ½λ 리ν©ν λ§μ μ§ννλ©° Promise κ°μ²΄μ λν΄ μμλ³Ό μ μλ μκ°μ΄ μκ²Όμ΅λλ€. κ·Έ μ€μμλ νΉν thenμ΄λΌλ λ©μλκ° μ’μλλ° κ·Έ κ²½νμ 곡μ νκ³ μ ν©λλ€.
μ°λ¦¬λ μ’ μ’ Promiseκ°μ²΄μ executor λΉλκΈ° ν¨μλ₯Ό μ μνμ¬ μ¬μ©ν λκ° μμ΅λλ€. λκΈ° μμμ λΉλκΈ°μ μνμ΄ νμν λκ° μκΈ° λλ¬Έμ λλ€.
κ·Έλ¬λ ESLintμμ μΆμ²νλλ‘ μ€μ μ μ§μ νλ€λ©΄ λ¬Έλ²μ μ€λ₯λ₯Ό νμΈν μ μμ΅λλ€. ESLint κ·μΉμΈ no-async-promise-executorμ λ°λΌ Promise executor ν¨μλ λΉλκΈ° ν¨μ(async ν¨μ)λ‘ μ μνμ§ μμμΌ νκΈ° λλ¬Έμ λλ€.
κ·Έλ λ€λ©΄ μ Promise executor ν¨μμ async ν€μλλ₯Ό μ¬μ©ν΄μλ μλ κΉμ?
μ μλ κΉ?
μνκΉκ²λ Promise executor ν¨μ λ΄μμ await ν€μλλ₯Ό μ¬μ©νλ κ²μ μ ν¨νμ§ μμ΅λλ€. μλνλ©΄ Promise executor ν¨μλ λκΈ°μ μΈ λμμ μνν΄μΌ νλ©°, await ν€μλλ λΉλκΈ° ν¨μ λ΄μμλ§ μ¬μ©ν μ μκΈ° λλ¬Έμ λλ€. μ¦, async ν€μλλ₯Ό μ¬μ©νλ©΄ μ묡μ μΌλ‘ Promiseλ₯Ό λ°ννλ λΉλκΈ° ν¨μκ° λμ΄ μκΈ°μΉ μμ λμμ μ΄λν μ μκΈ° λλ¬Έμ λλ€.
κ·Έλ λ€λ©΄ μ°λ¦¬κ° μνλ λμλλ‘ λκΈ°μ μνμ νλ Promise κ°μ²΄ μμμ λΉλκΈ°μ μνμ νλ ν¨μλ₯Ό μ¬μ©νλ λ°©λ²μ μμκΉμ??
κ²°λ‘ λΆν° λ§μλ리μλ©΄ μμ΅λλ€! λ°λ‘ Promise κ°μ²΄μμ βthenβ λ©μλλ₯Ό μ¬μ©νλ λ°©λ²μ λλ€.
then λ©μλλ 무μμΌκΉ?
then λ©μλλ Promise κ°μ²΄μμ μ¬μ©λλ λ©μλ μ€ νλλ‘, Promiseκ° μ±κ³΅μ μΌλ‘ μ΄νλ κ²½μ° μ€νν μ½λ°± ν¨μλ₯Ό λ±λ‘νλ λ° μ¬μ©λ©λλ€. Promiseκ° μ΄νλ λ ν΄λΉ μ½λ°± ν¨μκ° μ€νλ©λλ€.
then λ©μλ μ¬μ© μμ
promise.then(onFulfilled, onRejected);
μ¬κΈ°μ promiseμ Promise κ°μ²΄μ΄κ³ , onFulfilledλ Promiseκ° μ±κ³΅μ μΌλ‘ μ΄νλ λ μ€νν μ½λ°± ν¨μλ₯Ό λνλ΄λ ν¨μμ λλ€. onRejectedλ Promiseκ° κ±°λΆλ λ μ€νν μ½λ°± ν¨μλ₯Ό λνλ΄λ ν¨μμ λλ€.
μΆκ° μμ
fetch("https://api.example.com/data")
.then((response) => response.json()) // 첫 λ²μ§Έ λΉλκΈ° μμ
μ²λ¦¬
.then((data) => {
// μ΄μ μμ
μ κ²°κ³Ό(data)λ₯Ό κΈ°λ°μΌλ‘ μΆκ° μμ
μν
console.log(data);
return someAsyncFunction(data);
})
.then((result) => {
// μ΄μ μμ
μ κ²°κ³Ό(result)λ₯Ό κΈ°λ°μΌλ‘ μΆκ° μμ
μν
console.log(result);
})
.catch((error) => {
// μλ¬ μ²λ¦¬
console.error(error);
});
μμ μμ μμ fetch ν¨μλ λΉλκΈ°μ μΌλ‘ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ Promiseλ₯Ό λ°νν©λλ€. 첫 λ²μ§Έ then λ©μλμμλ μλ² μλ΅μ JSONμΌλ‘ λ³νν©λλ€. κ·Έλ¦¬κ³ λ€μ then λ©μλμμλ λ³νλ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μΆκ° μμ μ μνν©λλ€. λ§μ§λ§μΌλ‘ catch λ©μλμμλ μμΈκ° λ°μν κ²½μ° μλ¬λ₯Ό μ²λ¦¬ν©λλ€.
then λ©μλλ₯Ό μ¬μ©νμ¬ λΉλκΈ° μμ μ μμ°¨μ μΌλ‘ μ°κ²°νκ³ κ²°κ³Όλ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
μ°Έκ³
- then λ©μλλ μ²΄μΈ ννλ‘ μ¬μ©λ μλ μμ΅λλ€. μ¦, then λ©μλλ₯Ό μ°μμ μΌλ‘ νΈμΆνμ¬ μ¬λ¬ κ°μ λΉλκΈ° μμ μ μμ°¨μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€. μ²΄μΈ ννλ‘ μ¬μ©ν κ²½μ°, κ° then λ©μλμμ λ°νλ Promise κ°μ²΄λ₯Ό ν΅ν΄ λ€μ then λ©μλμ κ²°κ³Όλ₯Ό μ λ¬ν μ μμ΅λλ€.
- Promise κ°μ²΄ μ체λ λΉλκΈ°μ μΈ νΉμ±μ κ°μ§λ, κΈμμ λμ€λ Promise executor ν¨μλ λκΈ°μ μΌλ‘ λμλ©λλ€.