์์ฒญํ ์์
์ด ์์๋๋ก ์ฐจ๋ก์ฐจ๋ก ์คํ๋๋ ๋ฐฉ์์ด๋ค.
์์์ ์๋๋ก ์ฝ๋ ์คํํ๋ค.
๋๋ฆฐ ์์
์ด ์์ผ๋ฉด ์ ์ฒด ํ๋ฆ์ ๋ฉ์ถ๋ค.
console.log("1");
console.log("2");
console.log("3");
์ถ๋ ฅ๊ฒฐ๊ณผ:
1
2
3
์์ฒญํ ์์
์ด ๋ฐ๋ก ์คํ๋์ง ์๊ณ , ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์
์ผ๋ก ๋์ด๊ฐ๋ ๋ฐฉ์์ด๋ค.
ํน์ ์์
์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ฌ๋ฆฌ์ง ์๊ณ , ๋ค๋ฅธ ์์
์ ๋จผ์ ์ํํ ์ ์๋ค.
์) ์น์์์ ๋ฐ์ดํฐ ์์ฒญ/์๋ต, ํ์ด๋จธ, ์ด๋ฒคํธ ์ฒ๋ฆฌ
console.log("1");
setTimeout(() => {
console.log("2");
}, 1000); // 1์ด ํ ์คํ
console.log("3");
์ถ๋ ฅ๊ฒฐ๊ณผ:
1
3
2 โ 1์ด ๋ค์ ์คํ๋จ
๐ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋งค์ฐ ์ค์ํ ์น์์๋ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ์ฌ ์นํ์ด์ง๋ฅผ ๋ฉ์ถ์ง ์๊ฒ ํด์ผํ๋ค!
| ๋ฐฉ๋ฒ | ์ค๋ช | ์์ |
|---|---|---|
| ์ฝ๋ฐฑ ํจ์ | ์๋ฃ๋๋ฉด ํธ์ถ๋ ํจ์ ์ ๋ฌ | setTimeout(fn, 1000) |
| Promise | ๋น๋๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด๋ก ๋ค๋ฃธ | fetch().then(...) |
| async/await | ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ์ฒ๋ผ ์์ฑ | await axios.get(...) |
ํจ์์ "์์ ์ด ๋๋๋ฉด ์คํํ ๋ค๋ฅธ ํจ์"๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ ๋ฐฉ์
// 1์ด ๋ค์ ์คํ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ
console.log("1");
setTimeout(() => {
// ์ด ๋ถ๋ถ์ 1์ด๊ฐ ์ง๋์ผ ์คํ๋จ
console.log("2 (1์ด ํ ์คํ๋จ)");
}, 1000);
console.log("3");
// 1 โ 3 โ (1์ด ๋ค) โ 2 ์์๋ก ์ถ๋ ฅ๋จ
โ
์ฅ์
๊ฐ๋จํ ๋น๋๊ธฐ ์์
์ ์ ์ฉ
โ ๋จ์
์ฝ๋ฐฑ ์์ ์ฝ๋ฐฑ์ด ๋ ๋ค์ด๊ฐ๋ฉด ์ฝ๋ฐฑ ์ง์ฅ์ด ๋ฐ์
doSomething(() => {
doNext(() => {
doMore(() => {
console.log("์ฝ๋ฐฑ ์ง์ฅ...");
});
});
});
๋น๋๊ธฐ ์์
์ ์ฑ๊ณต(resolve) ๋๋ ์คํจ(reject)๋ฅผ ๋ด๋ ๊ฐ์ฒด .then()๊ณผ .catch()๋ก ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
// fetch๋ Promise๋ฅผ ๋ฐํํจ
fetch("https://jsonplaceholder.typicode.com/users")
.then((res) => {
// ์๋ฒ ์๋ต(res)์ JSON ๋ฐ์ดํฐ๋ก ํ์ฑ
return res.json();
})
.then((data) => {
// ํ์ฑ๋ ๋ฐ์ดํฐ ์ถ๋ ฅ
console.log("์ฑ๊ณต:", data);
})
.catch((err) => {
// ์๋ฌ ๋ฐ์ ์ ์คํ
console.error("์๋ฌ ๋ฐ์:", err);
});
โ
์ฅ์
์ฝ๋ฐฑ๋ณด๋ค ๊ฐ๋
์ฑ์ด ์ข์
.then() ์ฒด์ธ์ผ๋ก ์ฒ๋ฆฌ ์์๋ฅผ ์ ์ด ๊ฐ๋ฅ
โ ๋จ์
.then().then().catch() ์ฒด์ธ์ด ๊ธธ์ด์ง๋ฉด ์ฌ์ ํ ๋ณต์ก
Promise๋ฅผ ๋๊ธฐ์ฒ๋ผ ๋ณด์ด๊ฒ ์ฐ๋ ๋ฌธ๋ฒ
async ํจ์ ์์์๋ง await ์ฌ์ฉ ๊ฐ๋ฅ
// async ํค์๋๋ฅผ ๋ถ์ด๋ฉด ์ด ํจ์ ์์์ await ์ฌ์ฉ ๊ฐ๋ฅ
async function loadUser() {
try {
// fetch๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ (await)
const res = await fetch("https://jsonplaceholder.typicode.com/users");
// ์๋ต์ JSON์ผ๋ก ๋ณํํ ๋๊น์ง ๊ธฐ๋ค๋ฆผ
const data = await res.json();
// ์ต์ข
๋ฐ์ดํฐ ์ถ๋ ฅ
console.log("์ ์ ๋ฐ์ดํฐ:", data);
} catch (error) {
// ์ค๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์ด ๋ธ๋ก์ด ์คํ๋จ
console.error("์๋ฌ ๋ฐ์:", error);
}
}
// ์์์ ์ ์ํ ํจ์ ์คํ
loadUser();
โ
์ฅ์
๊ฐ๋
์ฑ ์ต๊ณ (๋๊ธฐ์ฒ๋ผ ์์ฑ ๊ฐ๋ฅ)
try-catch๋ก ์๋ฌ ์ฒ๋ฆฌ ๊ฐํธ
โ ๋จ์
async ํจ์ ์์์๋ง await ์ฌ์ฉ ๊ฐ๋ฅ
๋ณ๋ ฌ ์ฒ๋ฆฌ(์ฌ๋ฌ ์์
๋์์)๋ ๋ณ๋ ์ฒ๋ฆฌ ํ์