๋ชฉ์ฐจ
๐ ๋๊ธฐ vs ๋น๋๊ธฐ
๋๊ธฐ : ์์ ๋ณด์ฅ (์ฝ๋๊ฐ ๋ธ๋กํน ๋ ์ ์์)
๋น๋๊ธฐ : ์์ ๋ณด์ฅ X (์์ ์ข ๋ฃ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ์คํ๋จ)
๐ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง : ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์คํํ๋ ํ๋ก๊ทธ๋จ
๐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ : ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ํ๊ฒฝ
๐ setTimeout
์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฅ ํจ์
delay ๋งํผ ์ง์ฐํด์ ํ๋ฒ๋ง ์คํ์ํจ๋ค.(๋น๋๊ธฐ์์ )
setTimeout(callback, delay, param1, param2, ...);
๊ธฐ๋ณธ์ ์ธ setTimeout ์ฌ์ฉ๋ฐฉ๋ฒ
๋งค๊ฐ๋ณ์ ๋๊ธฐ๊ธฐ
setTimeout ์ทจ์ํ๊ธฐ
์ฌ๊ทํธ์ถํ๊ธฐ
`setInterval` ๊ณผ ๋น์ทํ ๋์์ ํ๋๋ฐ
์ด์ ์คํ์ด ๋๋์ผ๋ง ๋ค์ ์คํ์ ์์ฝํ๋ฏ๋ก ์คํ ๊ฐ๊ฒฉ์ด ์ผ์ ํ๊ฒ ์ ์ง๋๋ค๋ ํน์ง์ด ์์ (์์ ํจ)
๐ setInterval
์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฅ ํจ์
์ผ์ ์๊ฐ๋ง๋ค ๋ฐ๋ณต ์คํํ๋ค. (์ฃผ๊ธฐ์ ์ธ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ์ฌ์ฉ)
setInterval(callback, delay, param1, param2, ...);
๊ธฐ๋ณธ์ ์ธ setInterval ์ฌ์ฉ๋ฒ
setInterval ์ค์ง
๋งค๊ฐ๋ณ์ ์ ๋ฌ
setInterval ์ค์ฒฉ ์คํ
setInterval ์ ์ค๋ณต ์คํํ์ง ์๋๋ก ํ๊ณ , setTimeout ์ผ๋ก ๊ด๋ฆฌํ์ฌ ์ ์ด์๋ง
๐ ์ฝ๋ฐฑํจ์
์ฝ๋ฐฑ ํจ์๋ ๋ค๋ฅธ ํจ์ ์์์ ์คํ๋๋ ํจ์
๋์ค์ ์คํ๋ ํจ์๋ฅผ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๋ ๋ฐฉ์
๐ Promise
๋น๋๊ธฐ ์์ ์ด ๋๋ฌ์ ๋ ์คํ๋๋ ๊ฐ์ฒด
๋น๋๊ธฐ ์์ ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ค๋ฃฐ ์ ์๋ ๊ฐ์ฒด
์ฝ๋ฐฑํจ์์ ๋จ์ ์ ํด๊ฒฐํ (๊ฐ๋ ์ฑ, ์ฝ๋ฐฑ์ง์ฅ)
- Pending (๋๊ธฐ ์ํ): ์์ ์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ
- Fulfilled (์ดํ ์ํ): ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ์ํ
- Rejected (๊ฑฐ๋ถ ์ํ): ์์ ์ด ์คํจํ ์ํ
- `.then()` : ์์ ์ด ์ฑ๊ณตํ์ ๋ ์คํ๋๋ ์ฝ๋ฐฑ ํจ์
- `.catch()` : ์์ ์ด ์คํจํ์ ๋ ์คํ๋๋ ์ฝ๋ฐฑ ํจ์
- `resolve`์ `reject`๋ผ๋ ๋ ๊ฐ์ง ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์ฝ๋ฐฑ ํจ์๊ฐ ์ธ์๋ก ์ ๋ฌ๋จ
const myPromise = new Promise((resolve, reject) => {
let success = true;
setTimeout(() => {
if (success) {
resolve("์์
์ฑ๊ณต!");
} else {
reject("์์
์คํจ!");
}
}, 2000);
});
myPromise
.then(result => console.log("ok", result))
.catch(error => console.log("error", error));
Promise ์ฐ๊ฒฐ (์ฒด์ด๋)
function task1() {
return new Promise(resolve => {
setTimeout(() => {
console.log("์์
1 ์๋ฃ!");
resolve();
}, 1000);
});
}
function task2() {
return new Promise(resolve => {
setTimeout(() => {
console.log("์์
2 ์๋ฃ!");
resolve();
}, 1000);
});
}
function task3() {
return new Promise(resolve => {
setTimeout(() => {
console.log("์์
3 ์๋ฃ!");
resolve();
}, 1000);
});
}
task1()
.then(task2)
.then(task3)
.then(() => console.log("๋ชจ๋ ์์
์๋ฃ!"));
`Promise.all()` ์ฌ๋ฌ๊ฐ์ ์์ ๋์์ ์คํํ๊ธฐ
const taskA = new Promise(resolve => setTimeout(() => resolve("A ์๋ฃ!"), 1000));
const taskB = new Promise(resolve => setTimeout(() => resolve("B ์๋ฃ!"), 2000));
const taskC = new Promise(resolve => setTimeout(() => resolve("C ์๋ฃ!"), 1500));
Promise.all([taskA, taskB, taskC]).then(results => {
console.log("๋ชจ๋ ์์
์๋ฃ:", results);
});
๐ async/await
๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ฝ์ ์ ์๊ฒํจ
- ` async` ํจ์๋ ํญ์ `Promise` ๋ฅผ ๋ฐํํ๋ค.
- `Promise` ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ด๋ถ์์ ์๋์ผ๋ก `Promise` ๋ก ๊ฐ์ธ์ ๋ฐํ
- `async function ํจ์์ด๋ฆ() {}`
- `await` async ํจ์ ์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ, Promise ๊ฐ ์ฒ๋ฆฌ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐํ ๊ทธ ๊ฐ์ ๋ฐํํจ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๋๊ธฐ์ฒ๋ผ ์์ฐจ์ ์ผ๋ก ์งํ๋จ.
async function fetchData() {
return "๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์๋ฃ";
}
async function execute() {
const result = await fetchData();
console.log(result);
}
execute();
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function run() {
console.log("2์ด ๊ธฐ๋ค๋ฆฝ๋๋ค...");
await delay(2000);
console.log("2์ด ํ ์คํ๋จ!");
}
run();
fetch() ์ async/await ์ฌ์ฉ
async function fetchData() {
try {
let response = await fetch("https://jsonplaceholder.typicode.com/posts/1");
let data = await response.json();
console.log("๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์๋ฃ:", data);
} catch (error) {
console.log("์๋ฌ ๋ฐ์:", error);
}
}
fetchData();
๋น๋๊ธฐ ์์ ์ฌ๋ฌ๊ฐ ์ฒ๋ฆฌ
async function task1() {
await new Promise(resolve => setTimeout(resolve, 1000));
console.log("โ
์์
1 ์๋ฃ!");
}
async function task2() {
await new Promise(resolve => setTimeout(resolve, 2000));
console.log("โ
์์
2 ์๋ฃ!");
}
async function runTasks() {
console.log("์์
์์!");
await task1();
await task2();
console.log("๋ชจ๋ ์์
์๋ฃ!");
}
runTasks();