Promise
λΉλκΈ° μ½λμμλ μ€ν μμλ₯Ό μμΈ‘νκΈ° μ΄λ ΅κΈ° λλ¬Έμ λΉλκΈ° μμ μ΄ λλ ν μ€νν μ½λλ₯Ό λͺ ννκ² μ μ΄νκΈ° μν΄μ Promiseκ° νμν©λλ€.
Promise λ?
λΉλκΈ° μμ μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μλλ‘ λμμ£Όλ μλ°μ€ν¬λ¦½νΈμ λ΄μ₯ κ°μ²΄
Promiseμ 3κ°μ§ μν
- Pending(λκΈ°) : μμ§ μμ μ΄ μλ£λμ§ μμ μν
- Fulfilled(μ±κ³΅) : λΉλκΈ° μμ μ΄ μ±κ³΅μ μΌλ‘ λ§λ¬΄λ¦¬λ μν
- Rejected(μ€ν¨) : λΉλκΈ° μμ μ΄ μ€ν¨ν μν
λκΈ° -> μ±κ³΅ : ν΄κ²°(resolve) - μνλ μμ μ΄ μλ£λμμ λ μ€ν
λκΈ° -> μ€ν¨ : κ±°λΆ(reject) - μμ μ€ μ€λ₯κ° λ°μνμ λ μ€ν
const promise = new Promise(() => {
setTimeout(() => {
console.log("μλ
");
}, 2000);
});
console.log(promise);
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("μλ
");
resolve();
}, 2000);
});
setTimeout(() => {
console.log(promise);
}, 3000);
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("μλ
");
resolve("κ²°κ³Ό");
}, 2000);
});
setTimeout(() => {
console.log(promise);
}, 3000);
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("μλ
");
reject("μ€ν¨ν μ΄μ ");
}, 2000);
});
setTimeout(() => {
console.log(promise);
}, 3000);
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const num = 10;
if (typeof num === "number") {
resolve(num + 10);
} else {
reject("numμ μ«μκ° μλλλ€.");
}
}, 2000);
});
promise.then((value) => {
console.log(value); // 20
});
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const num = null;
if (typeof num === "number") {
resolve(num + 10);
} else {
reject("numμ μ«μκ° μλλλ€.");
}
}, 2000);
});
promise.catch((error) => {
console.log(error); // numμ μ«μκ° μλλλ€.
});
Promise Chaining
νλμ Promiseκ° λλλ©΄ κ·Έ κ²°κ³Όλ₯Ό λ€μ Promiseλ‘ λκΈ°λ λ°©μμΌλ‘ μ°μμ μΈ λΉλκΈ° μμ μ μ²λ¦¬νλ ν¨ν΄
new Promise((resolve, reject) => {
setTimeout(() => resolve(10), 1000);
})
.then(result => {
console.log("Step 1:", result);
return result * 2;
})
.then(result => {
console.log("Step 2:", result);
return result * 3;
})
.then(result => {
console.log("Step 3:", result);
return result - 5;
})
.then(finalResult => {
console.log("Final result:", finalResult);
});
μμ μ½λμ μΆλ ₯ κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€.
(1μ΄ ν)
Step 1: 10
Step 2: 20
Step 3: 60
Final result: 55
μ μ©ν΄λ³΄κΈ°
new Promise((resolve, reject) => {
console.log("Initial");
resolve();
})
.then(() => {
throw new Error("Something failed");
console.log("Do this");
})
.catch(() => {
console.log("Do that");
})
.then(() => {
console.log("Do this, whatever happened before");
});
new Promiseκ° μ€νλλ©΄μ console.log("Initial"); κ° μ€νλΌμ Initialμ΄ μΆλ ₯λ©λλ€.
resolve() κ° νΈμΆλμΌλ―λ‘ λ€μ .then() λΈλ‘μΌλ‘ μ΄λνκ³ , .then() λ΄λΆμμ throw new Error("Something failed"); κ° μ€νλ©λλ€.
κ°μ λ‘ μλ¬λ₯Ό λ°μμν€κΈ° λλ¬Έμ console.log("Do this");λ μ€νλμ§ μμ΅λλ€.
μλ¬κ° λ°μνμΌλ―λ‘ .catch() λ‘ λμ΄κ°μ console.log("Do that"); κ° μ€νλΌμ Do thatμ΄ μΆλ ₯λ©λλ€.
.then()μΌλ‘ λμ΄κ°μ console.log("Do this, whatever happened before"); κ° μ€νλΌμ Do this, whatever happened beforeμ΄ μΆλ ₯λ©λλ€.
μΆλ ₯ κ²°κ³Ό
Initial
Do that
Do this, whatever happened before