์๋ฐ์คํฌ๋ฆฝํธ async์ await ; ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ ์ฝ๊ฒ !
๋น๋๊ธฐ ์์ ์ ๋ค๋ฃจ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
promise ๊ฐ๋ ๊ณผ ๋๋ถ์ด async์ await ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
1. async ํค์๋๋?
async๋ ํจ์๋ฅผ ๋น๋๊ธฐ ํจ์๋ก ๋ง๋ค์ด์ฃผ๋ ํค์๋์ด๋ค.
- async๋ฅผ ํจ์ ์์ ๋ถ์ด๋ฉด, ํด๋น ํจ์๋ ํญ์ Promise๋ฅผ ๋ฐํํ๋ค.
- ๋ฐํ๊ฐ์ด Promise๊ฐ ์๋๋๋ผ๋ ์๋์ผ๋ก Promise๋ก ๊ฐ์ธ์ ๋ฐํ๋๋ค.
async function getData() {
return {
name: "David",
id: "d0228",
};
}
console.log(getData());
์ ์ฝ๋์getData()๋ฅผ ์คํํ๋ฉด ๊ฐ์ฒด ์์ฒด๊ฐ ๋ฐํ๋๋ ๊ฒ์ด ์๋๋ผ,
ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฒฐ๊ณผ ๊ฐ์ผ๋ก ๊ฐ๋ Promise ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
*promise ์ํ ์ฐธ๊ณ
pending (๋๊ธฐ) | ์์ ์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ |
fulfilled (์ฑ๊ณต) | ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ์ํ (resolve ํธ์ถ) |
rejected (์คํจ) | ์์ ์ด ์คํจํ ์ํ (reject ํธ์ถ) |
Promise {<fulfilled>: {name: "David", id: "d0228"}}
์ฆ, async ํจ์๋ ํญ์ PromiseResult๋ฅผ ๊ฐ์ธ์ ๋ฐํํ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
2. async ํจ์ ๋ด๋ถ์์ Promise ๋ฐํํ๊ธฐ
async ํจ์ ๋ด๋ถ์์ ์๋ Promise๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ์๋, ํด๋น Promise๊ฐ ๊ทธ๋๋ก ์ฌ์ฉ๋๋ค.
async function getData1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
name: "์ด์ ์",
id: "summerwinnner",
});
}, 1500);
});
}
console.log(getData1());
Promise {<pending>}
1.5์ด ํ resolve๊ฐ ํธ์ถ๋๋ฉด์ Promise๋ fulfilled ์ํ๋ก ์ ํ๋๊ณ , ๋ฐ์ดํฐ๊ฐ ๋ฐํ๋๋ค.
์ ๋ฆฌํ์๋ฉด, ๋น๋๊ธฐ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ async ํจ์ ๋ด๋ถ์์ ์ง์ Promise๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด ๋๋ค.
3. await ํค์๋๋?
await๋ async ํจ์ ๋ด๋ถ์์๋ง ์ฌ์ฉํ ์ ์๋ ํค์๋์ด๋ค.
- await๋ Promise๊ฐ ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋ง๋ ๋ค.
- ๊ธฐ์กด์๋ .then() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง, await๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฐ์ค๋ฝ๊ฒ ํ๋ฆ์ ๊ตฌ์ฑํ ์ ์๋ค.
async function printData() {
const data = await getData();
console.log(data);
}
printData();
- await getData()๋ getData()๊ฐ ๋ฐํํ๋ Promise๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ด data ๋ณ์์ ์ ์ฅ๋๋ค.
- ์ดํ console.log(data)๊ฐ ์คํ๋๋ค.
{name: "David", id: "d0228"}
4. await๊ฐ ์๋ค๋ฉด?
await ์์ด ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ค๋ฉด .then()์ ์ฌ์ฉํด์ผ ํ๋ค.
getData().then((data) => {
console.log(data);
});
await๋ฅผ ์ฌ์ฉํ๋ฉด
.then() ์ฒด์ธ์ ๊ตฌ์ฑํ์ง ์์๋ ๋๋ฉฐ, ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฌ์์ง๋ค.
5. async / await ์์ฝ
async | ํจ์๋ฅผ ๋น๋๊ธฐ ํจ์๋ก ๋ง๋ค์ด Promise๋ฅผ ๋ฐํํ๊ฒ ํจ |
await | Promise๊ฐ ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์ฝ๋๋ฅผ ์คํํจ (async ํจ์ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ) |
๐ก์ ๋ฆฌ
async์ await๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ์์ ์ ํจ์ฌ ๋ ์ง๊ด์ ์ผ๋ก, ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๋ค.
Promise์ then์ ์ฌ์ฉํ๋ ๊ฒ๋ ์ ์ฉํ์ง๋ง, ๋ณต์กํ ๋น๋๊ธฐ ํ๋ฆ์ ๋ค๋ฃฐ ๋๋ async/await๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
'๐กLanguage > JAVASCRIPT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ์ Promise (2) | 2025.04.26 |
---|---|
[JS] ๋ก์ปฌ์คํ ๋ฆฌ์ง(LocalStorage) / JSON - Object ํ์ ๋ณํ (2) | 2025.03.07 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด Jsonํ์ ๋ณํ, ajax๋ฅผ ํตํด controller์ ๋๊ธฐ๊ธฐ (0) | 2025.01.05 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด ๊ณต๋ฐฑ ์ ๊ฑฐํ๊ธฐ - trim() , replace() (1) | 2025.01.04 |
[JS] querySelector(), querySelectorAll() (0) | 2024.08.11 |