js
const myPromise = new Promise((resolve, reject) => {
// ํจ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ด - resolve(์ฑ๊ณต), reject(์คํจ)
setTimeout(() => {
// resolve(111); // 1์ด ๋ค์ ์ฑ๊ณตํ๋ promise
reject(new Error()); // 1์ด ๋ค์ ์๋ฌ ๋ฐ์
}, 1000);
});
// promise๊ฐ ๋๋๊ณ ํ ์์
์ค์
myPromise
.then((result) => {
console.log(result);
})
.catch((error) => {
console.log(error);
});
js
function runDelay(seconds) {
// ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌ๋ฐ์ง ์์
return new Promise((resolve, reject) => {
// (์ฑ๊ณต, ์คํจ) // ์ฌ๊ธฐ์ ์ฝ๋ฐฑ์ ์ ๋ฌ๋ฐ์
// ์คํ๊ตฌ
if (!seconds || seconds < 0) {
// ์๊ฐ์ด ๋์ด์ค์ง ์์๊ฑฐ๋ 0๋ณด๋ค ์์์ ๋
reject(new Error("์๊ฐ์ 0๋ณด๋ค ์ปค์ผ ํจ")); // ์๋ฌ ๋ฐ์. ์ฒ๋ฆฌํด์ฃผ๋ ๊ณณ์ ์์ง ์์
}
setTimeout(resolve, seconds * 1000);
});
}
runDelay(2)
// ํ์ํ ์ผ์ ์ํ. ์ฑ๊ณต
.then(() => {
console.log("ํ์ด๋จธ ์๋ฃ");
})
// ์๋ฌ์ฒ๋ฆฌ. ์คํจ
// .catch((error) => { console.error(error); });
.catch(console.error) // ์ ๋ฌ๋ ์ธ์์ ํธ์ถํ ์ธ์๊ฐ ๊ฐ์ ๋ ์๋ต ๊ฐ๋ฅ
// ์ต์ข
. ๋ฌด์กฐ๊ฑด ํธ์ถ
.finally(() => {
console.log("๋");
});
/*
function runDelay(callback, seconds) {
// ์ธ์ ๊ฐ 2๊ฐ
if (!callback) {
throw new Error("callback ํจ์๋ฅผ ์ ๋ฌ๋ฐ์์ผ ํฉ๋๋ค");
}
if (!seconds || seconds < 0) {
// ์๊ฐ์ด ๋์ด์ค์ง ์์๊ฑฐ๋ 0๋ณด๋ค ์์์ ๋
throw new Error("์๊ฐ์ 0๋ณด๋ค ์ปค์ผ ํจ");
}
setTimeout(callback, seconds * 1000);
}
// try catch : ์๋ฌ ๋ฐ์ ์ ํ๋ก๊ทธ๋จ์ด ๊ฐ์ ์ข
๋ฃ(app crashed) ๋์ง ์๊ณ ์๋ ๋๋๋ก ํจ(๋น๋๊ธฐ์์๋ ๊ฑฐ์ ์ฌ์ฉํจ)
try {
runDelay(() => {
console.log("ํ์ด๋จธ ์๋ฃ");
}, -2);
} catch {
console.log("ํ๋ก๊ทธ๋จ ์๋ฌ");
}
*/
2์ด ํ ์คํ
js
function fetchEgg(chicken) {
// return new Promise((resolve, reject) => {});
return Promise.resolve(`${chicken} -> ๐ฅ`);
}
function friedEgg(egg) {
return Promise.resolve(`${egg} -> ๐ณ`);
}
function getChicken() {
// return Promise.resolve(`๐ฟ -> ๐`);
return Promise.reject(new Error("์นํจ์ ๊ฐ์ง๊ณ ์ฌ ์ ์์"));
}
getChicken() // ๐ฟ -> ๐
// catch ๋งจ ์ฒ์์ ์์ฑ ๊ฐ๋ฅ
// .catch((error) => {
// console.log(error.name)
// return "๐" // ์๋ฌ๋ ๋์ง๋ง undefined์ ์ถ๊ฐ๋จ
// })
.catch(() => "๐") // ๋์ฒด๊ฐ์ ๋ฃ์ด์ค์ ์๋ฌ๊ฐ ๋๋ ์ ์์ ์ผ๋ก ์๋ํ๋๋ก ํจ.
.then((chicken) => { return fetchEgg(chicken) }) // ๐ฟ -> ๐ -> ๐ฅ
.then((egg) => friedEgg(egg)) // ๐ฟ -> ๐ -> ๐ฅ -> ๐ณ
.then(console.log)
// .catch((error)=>console.log(error.name))
// ์์ ๊ฐ์ ์ฝ๋
// .then(fetchEgg)
// .then(friedEgg)
// .then(console.log)
/*
fetchEgg("๐").then((egg) => {
console.log("๋ฐ์์จ ๊ฒ์? : ", egg); // ์ธ์๊ฐ์ fetchEggํจ์์ ๋ฆฌํด
// .then(console.log(egg)); // ๋ฐ์์จ ์ธ์์ ํธ์ถํ ์ธ์๊ฐ ๊ฐ์ ์ ์๋ต ๊ฐ๋ฅ
});
*/
js
function getBanana() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("๐");
}, 3000);
});
}
function getApple() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("๐");
}, 2000);
});
}
function getKiwi() {
return Promise.reject(new Error("ํค์๋ ์์ด์ ใ
ใ
"));
}
// ๋ฐ๋๋์ ์ฌ๊ณผ๋ฅผ ํจ๊ป ๊ฐ์ง๊ณ ์์ ๋ฐฐ์ด๋ก ๋ง๋ฆ
getBanana() // ํธ์ถ
// banana์์ ๋ฐ์ ์จ ๋ด์ฉ์ apple์ ์ ๋ฌ -> ์ ๋ฌ๋ฐ์ apple์ ๋ฐฐ์ด๋ก ๋ง๋ฆ (๊ณผ์ ์ด ๋ด๋ถ์์ ์ด๋ฃจ์ด์ง)
.then((banana) =>
getApple().then((apple) => {
return [banana, apple]; // ํ ์ค์ด๋ผ return ์๋ต ๊ฐ๋ฅ
})
)
.then(console.log); // ๋ฐ๋๋ 3์ด + ์ฌ๊ณผ 1์ด = 4์ด ํ ์ถ๋ ฅ
// ํ๋ฒ์ ๋ชจ๋ promise๋ค์ ์คํ(๋ณ๋ ฌ์ ์ผ๋ก)
Promise.all([getBanana(), getApple()]).then((fruits) =>
console.log("all - ", fruits)
); // ์ด 3์ด
Promise.all([getBanana(), getApple(), getKiwi()])
.then((fruits) => console.log("all error - ", fruits)) // ์ถ๋ ฅโ
.catch(console.log); // ์๋ฌ ์๋ ํจ์ ์ฒ๋ฆฌ
// promise๋ค ์ค์ ์ ์ผ ๋นจ๋ฆฌ ์ํ๋ ์ฝ๋๋ง ์คํ
Promise.race([getBanana(), getApple()])
.then((fruits) => console.log("race - ", fruits)) // ์ฌ๊ณผ๋ง ๋ณด์
.catch((error) => {
console.log(error);
});
// ๋ชจ๋ ๊ฒฐ๊ณผ์ ๋ํด ์์๋ณด๊ณ ์ถ์ ๋
Promise.allSettled([getBanana(), getApple(), getKiwi()])
.then((fruits) => console.log("allSettled - ", fruits)) // ๋ชจ๋ ๊ฒฐ๊ณผ์ ๋ํด ์ถ๋ ฅ
.catch(console.log); // ๋ฐ๋ก ์ถ๋ ฅโ