[240730] TIL
λ₯λ€μ΄λΈ 44μ₯
- 44μ₯ promise μ½κ³ λ Έμ μ μ 리ν¨
- μ½λ°±ν¬μ ν΄κ²°νκΈ° μν΄μ λμ΄
- μλ¬μ²λ¦¬λ μ΄λ €μ
νλ‘λ―Έμ€μ νμ μ²λ¦¬ λ©μλ
- νλ‘λ―Έμ€μ λΉλκΈ° μ²λ¦¬ μνκ° λ³ννλ©΄ νμ μ²λ¦¬ λ©μλμ μΈμλ‘ μ λ¬ν μ½λ°± ν¨μκ° μ νμ μΌλ‘ νΈμΆλλ€.
- νμ μ²λ¦¬ λ©μλμ μ½λ°±ν¨μμ νλ‘λ―Έμ€μ μ²λ¦¬ κ²°κ³Όκ° μΈμλ‘ μ λ¬
- λͺ¨λ νμ μ²λ¦¬λ promise λ°ν
- then, catch, finally μ 곡
1. Promise.prototype.then
- 2κ°μ μ½λ°±ν¨μλ₯Ό μΈμλ‘ μ λ¬ λ°μ
- 첫 λ²μ§Έ μ½λ°± ν¨μλ νλ‘λ―Έμ€κ° fulfilled μνκ° λλ©΄ νΈμΆ
- λ λ²μ§Έ μ½λ°± ν¨μλ νλ‘λ―Έμ€κ° rejected μνκ° λλ©΄ νΈμΆ
- promise λ°ν
// fulfilled
new Promise((resolve) => resolve("fulfilled")).then(
(v) => console.log(v),
(e) => console.error(e)
); // fulfilled
// rejected
new Promise((_, reject) => reject(new Error("rejected"))).then(
(v) => console.log(v),
(e) => console.error(e)
); // Error: rejected
- then λ©μλλ μΈμ λ νλ‘λ―Έμ€ λ°ν
- then λ©μλμ μ½λ°± ν¨μκ° νλ‘λ―Έμ€λ₯Ό λ°ννλ©΄ κ·Έ νλ‘λ―Έμ€ κ·Έλλ‘ λ°ν
- νλ‘λ―Έμ€κ° μλ κ°μ λ°ννλ©΄ μ묡μ μΌλ‘ resolve λλ reject νμ¬ νλ‘λ―Έμ€λ₯Ό μμ±νμ¬ λ°ν
2. Promise.prototype.catch
- rejected μνμΈ κ²½μ° νΈμΆ
- ν κ°μ μ½λ°± ν¨μ μΈμλ‘ μ λ¬
- promise λ°ν
// rejected
new Promise((_, reject) => reject(new Error("rejected"))).catch((e) =>
console.log(e)
); // Error : rejected
3. Promise.prototype.finally
- μ±κ³΅, μ€ν¨ μκ΄ μμ΄ λ¬΄μ‘°κ±΄ ν λ² νΈμΆ
- promise λ°ν
new Promise(() => {}).finally(() => console.log("finally")); // finally
νλ‘λ―Έμ€μ μλ¬ μ²λ¦¬
- μλ¬ μ²λ¦¬λ then λ©μλμμ νμ§λ§κ³ catch λ©μλμμ νλ κ²μ κΆμ₯
νλ‘λ―Έμ€ μ²΄μ΄λ
- then, catch, finally νμ μ²λ¦¬ λ©μλλ μ½λ°± ν¨μκ° λ°νν νλ‘λ―Έμ€λ₯Ό λ°ννλ€. μ°μμ μΌλ‘ νΈμΆν μ μκ³ , μ΄λ₯Ό νλ‘λ―Έμ€ μ²΄μ΄λμ΄λΌ ν¨
- νμμ²λ¦¬ λ©μλμ μ½λ°± ν¨μκ° νλ‘λ―Έμ€κ° μλ κ°μ λ°ννλλΌλ μ묡μ μΌλ‘ resolve λλ reject νμ¬ νλ‘λ―Έμ€λ₯Ό μμ±ν΄ λ°ννλ€.
- νλ‘λ―Έμ€ μ²΄μ΄λμ ν΅ν΄ λΉλκΈ° μ²λ¦¬ κ²°κ³Όλ₯Ό μ λ¬λ°μ νμ μ²λ¦¬ νλ―λ‘, μ½λ°±ν¬μ΄ λ°μνμ§ μμ§λ§, μ½λ°± ν¨ν΄μ μ¬μ©νλλ° κ°λ μ±μ΄ μ’μ§ μλ€.
β ES8μμ λμ λ async/await λ₯Ό ν΅ν΄ ν΄κ²° κ°λ₯
νλ‘λ―Έμ€μ μ μ λ©μλ
1. Promise.resolve / Promise.reject
- μ΄λ―Έ μ‘΄μ¬νλ κ°μ λννμ¬ νλ‘λ―Έμ€λ₯Ό μμ±νκΈ° μν΄ μ¬μ©
const resolvedPromise = Promise.resolve([1, 2, 3]);
resolvedPromise.then(console.log); // [1,2,3]
// μλμ λμΌ
const resolvedPromise = new Promise((resolve) => resolve([1, 2, 3]));
resolvedPromise.then(console.log); // [1,2,3]
2. Promise.all
- μ¬λ¬ κ°μ λΉλκΈ° μ²λ¦¬λ₯Ό λͺ¨λ λ³λ ¬ μ²λ¦¬ν λ μ¬μ©
- νλ‘λ―Έμ€λ₯Ό μμλ‘ κ°λ λ°°μ΄ λ±μ μ΄ν°λ¬λΈμ μΈμλ‘ μ λ¬ λ°μ
- μ λ¬λ°μ λͺ¨λ νλ‘λ―Έμ€κ° λͺ¨λ fullfilled μνκ° λλ©΄ λͺ¨λ μ²λ¦¬ κ²°κ³Όλ₯Ό λ°°μ΄μ μ μ₯ν΄ μλ‘μ΄ νλ‘λ―Έμ€ λ°ν
- νλλΌλ rejected μνκ° λλ©΄ λλ¨Έμ§ νλ‘λ―Έμ€κ° fulfilled μνκ° λλ κ²μ κΈ°λ€λ¦¬μ§ μκ³ μ¦μ μ’ λ£ (then μ€ν μν¨)
const requestData1 = () =>
new Promise((resolve) => setTimeout(() => resolve(1), 3000));
const requestData2 = () =>
new Promise((resolve) => setTimeout(() => resolve(2), 2000));
const requestData3 = () =>
new Promise((resolve) => setTimeout(() => resolve(3), 1000));
Promise.all([requestData1(), requestData2(), requestData3()])
.then(console.log) // [ 1,2,3 ] => μ½ 3μ΄ μμ
.catch(console.error);
3. Promise.race
- Promise.all μ²λΌ λͺ¨λ νλ‘λ―Έμ€κ° fulfilled μνκ° λλ κ²μ κΈ°λ€λ¦¬μ§ μκ³ , κ°μ₯ λ¨Όμ fulfilled μνκ° λ νλ‘λ―Έμ€μ κ²°κ³Ό μ²λ¦¬λ₯Ό resolve ν¨
4. Promise.allSettled
-
μ λ¬ λ°μ νλ‘λ―Έμ€κ° λͺ¨λ settled μν (μνλ μν)κ° λλ©΄ μ²λ¦¬ κ²°κ³Όλ₯Ό λ°°μ΄λ‘ λ°ννλ€.
const requestData1 = () =>
new Promise((resolve) => setTimeout(() => resolve(1), 3000));
const requestData2 = () =>
new Promise((resolve) => setTimeout(() => resolve(2), 2000));
const requestData3 = () =>
new Promise((resolve, reject) =>
setTimeout(() => reject(new Error("Failed")), 1000)
);
Promise.allSettled([requestData1(), requestData2(), requestData3()])
.then((results) => console.log(results))
.catch(console.error); // μ΄ λΆλΆμ μ€νλμ§ μμ΅λλ€.
// μΆλ ₯ κ²°κ³Ό
[
{ status: "fulfilled", value: 1 },
{ status: "fulfilled", value: 2 },
{ status: "rejected", reason: Error: Failed }
]
λ§μ΄ν¬λ‘νμ€ν¬ ν
console.log("script start");
setTimeout(() => {
console.log("setTimeout");
}, 0);
Promise.resolve()
.then(() => {
console.log("promise1");
})
.then(() => {
console.log("promise2");
});
console.log("script end");
// κ²°κ³Ό
script start
script end
promise1
promise2
setTimeout
- νλ‘λ―Έμ€ νμ μ²λ¦¬ λ©μλμ μ½λ°± ν¨μλ νμ€ν¬ νκ° μλλΌ λ§μ΄ν¬λ‘νμ€ν¬ νμ μ μ₯λλ€.
- λ§μ΄ν¬λ‘νμ€ν¬ ν / νμ€ν¬ ν β λ³λ
- λ§μ΄ν¬λ‘νμ€ν¬ νλ νν¬μ€ νλ³΄λ€ μ°μ μμκ° λλ€
- μ΄λ²€νΈ 루νλ μ½ μ€νμ΄ λΉλ©΄ λ§μ΄ν¬λ‘νμ€ν¬ νμμ λκΈ°νκ³ μλ ν¨μ λ¨Όμ κ°μ Έμ€κ³ , λ§μ΄ν¬λ‘νμ€ν¬ νκ° λΉλ©΄ νμ€ν¬ ν ν¨μ κ°μ Έμ΄
fetch
- XMLHttpRequest κ°μ²΄μ λ§μ°¬κ°μ§λ‘ HTTP μμ² μ μ‘ κΈ°λ₯μ μ 곡νλ ν΄λΌμ΄μΈνΈ μ¬μ΄λ Web API
- XMLHttpRequest λ³΄λ€ κ°λ¨νκ³ νλ‘λ―Έμ€ μ§μ
- fetch ν¨μλ HTTP μλ΅μ λνλ΄λ Response κ°μ²΄λ₯Ό λνν Promise κ°μ²΄λ₯Ό λ°ν
const wrongUrl = "https://wrongUrl";
fetch(wrongUrl)
.then((response) => {
if (!response.ok) throw new Error(response.statusText);
return response.json();
})
.then((todo) => console.log(todo))
.catch((err) => console.error(err));
- fetch λ HTTP μλ¬ reject μν¨
- axios λ λͺ¨λ HTTP μλ¬ reject νλ‘λ―Έμ€ λ°ννκ³ fetch λ³΄λ€ λ€μν κΈ°λ₯ μ§μν¨
Leave a comment