[JS] async ํจ์๊ฐ await๋ฅผ ๋ง๋ฌ์ ๋ ๋์ ํ๋ฆ
TL;DR
async/await๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์์ฑํ ์ ์๋๋ก ํด์ฃผ๋ ๋ฌธ๋ฒ์ ์คํ(Syntax Sugar)์ด๋ค. ๋ด๋ถ์ ์ผ๋ก๋ async ํจ์ ์คํ์ ์ผ์ ์ค๋จํ๋ค๊ฐ ํ๋ก๋ฏธ์ค๊ฐ ์ฒ๋ฆฌ๋๋ฉด ๋ง์ดํฌ๋กํ์คํฌ ํ๋ฅผ ํตํด ๋ค์ ์ฌ๊ฐ ํ๋ ๋ฐฉ์์ผ๋ก ๋ ผ๋ธ๋กํน์ ์ ์งํ๋ค.
async/await๋ ํจ์ ์คํ์ ์ค๋จ/์ฌ๊ฐํ ์ ์๋ ์ ๋๋ ์ดํฐ์ ํ๋ก๋ฏธ์ค๋ฅผ ํ์ฉํด์ ๊ตฌํ๋์ด ์์ผ๋ฉฐ, await ์ดํ์ ์ฝ๋๋ ์ฌ์ค์ .then()
๋ฉ์๋์ ์ฝ๋ฐฑ ํจ์๋ผ๊ณ ๋ณผ ์ ์๋ค.
promise.then(() => { /* await ์ดํ์ ์ฝ๋ */ })
async/await ๋ด๋ถ ๋ฉ์ปค๋์ฆ
- async ํจ์๋ฅผ ํธ์ถํ๋ฉด await ํค์๋๋ฅผ ๋ง๋๊ธฐ ์ ๊น์ง ์ผ๋ฐ ํจ์์ฒ๋ผ ๋๊ธฐ์ ์ผ๋ก ์คํ
- async ํจ์ ์คํ ์ค await ํค์๋๋ฅผ ๋ง๋๋ฉด ํด๋น ์ง์ ์์ ํจ์ ์คํ์ ์ผ์ ์ค์งํ๊ณ , ํธ์ถ์์๊ฒ ์ ์ด๊ถ ๋ฐํ. ๋ฐฑ๊ทธ๋ผ์ด๋์์ Promise ์ฒ๋ฆฌ ์์.
- async ํจ์๊ฐ ์ผ์ ์ค์ง(suspend)๋ ๋์ JS ๋ฐํ์์ ํธ์ถ์ ์ปจํ ์คํธ์ ๋ค์ ๋๊ธฐ ์ฝ๋ ๊ณ์ ์คํ. ๋๋ถ์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋ธ๋กํน๋์ง ์๊ณ , UI ๋ ๋๋ง ๊ฐ์ ๋ค๋ฅธ ์์ ์ ์ง์ฐ ์์ด ์ฒ๋ฆฌํ ์ ์์.
- ํ๋ก๋ฏธ์ค๊ฐ ์ฒ๋ฆฌ(์ดํ ํน์ ๊ฑฐ๋ถ)๋๋ฉด, ์ค๋จ ์ง์ ์ดํ์ ์ฝ๋๊ฐ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์ถ๊ฐ๋๊ณ , ์ด๋ฒคํธ ๋ฃจํ์ ์ํด ์ฝ์คํ์ ๋ค์ด๊ฐ์ ์คํ ์ฌ๊ฐ. ์ด๋ await ํํ์์ ์ดํ๋ ๊ฐ์ ๋ฐํํ๋ฉฐ, ๊ฑฐ๋ถ๋ ๊ฒฝ์ฐ ์์ธ throw.
- ๋๋จธ์ง ๋๊ธฐ ์ฝ๋ ์คํ. async ํจ์ ์์ ๋ ๋ค๋ฅธ await๋ฅผ ๋ง๋๋ฉด 2-4 ๊ณผ์ ๋ฐ๋ณต.
async/await ์คํ ํ๋ฆ ์์
function main() {
// Promise ์์ฑ์๊ฐ ๋ฐ๋ executor ํจ์ ์์ฒด๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋จ
return new Promise((resolve) => {
console.log(3);
resolve(4);
console.log(5);
});
}
async function f() {
console.log(2);
let r = await main(); // ์ฌ๊ธฐ์ f() ์คํ ์ผ์ ์ค๋จ
console.log(r); // main() ํ๋ก๋ฏธ์ค ์ฒ๋ฆฌ ํ ์คํ
}
console.log(1);
f();
console.log(6);
// 1, 2, 3, 5, 6, 4
console.log(1)
: ์ ์ญ ์ค์ฝํ์ ๋๊ธฐ์ ์ฝ๋ ์คํf()
ํจ์ ํธ์ถconsole.log(2)
: ํจ์ ๋ด๋ถ์ ๋๊ธฐ์ ์ฝ๋ ์คํmain()
ํจ์ ํธ์ถconsole.log(3)
: ์คํ์ ํจ์ ๋ด๋ถ์ ๋๊ธฐ์ ์ฝ๋ ์คํresolve(4)
: ํ๋ก๋ฏธ์ค๋ฅผ ์ดํ(fulfilled) ์ํ๋ก ๋ณ๊ฒฝ → ์ด ์์ ์ await๋ก ๋๊ธฐ์ค์ธf()
ํจ์์ ๋๋จธ์ง ๋ถ๋ถ์ด ๋ง์ดํฌ๋กํ์คํฌ ํ์ ๋ฑ๋ก๋จconsole.log(5)
: ์คํ์ ํจ์ ๋ด๋ถ์ ๋๊ธฐ์ ์ฝ๋ ์คํmain()
ํจ์๋ ์ดํ๋ ์ํ์ ํ๋ก๋ฏธ์ค ๋ฐํ
main()
ํจ์๊ฐ ๋ฐํํ ํ๋ก๋ฏธ์ค๋ฅผ ํ์ธํ๊ณ ,f()
ํจ์ ์คํ ์ผ์ ์ค๋จ ๋ฐ ์ ์ญ ์ค์ฝํ๋ก ์ ์ด๊ถ ๋ฐํ
console.log(6)
: ์ ์ญ ์ค์ฝํ์ ๋๊ธฐ์ ์ฝ๋ ์คํf()
ํจ์์ ๋๋จธ์ง ์ฝ๋ ์คํ → ์ฝ์คํ์ด ๋น์ด์๋๊ฑธ ํ์ธํ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋ง์ดํฌ๋กํ์คํฌ ํ์ ์์ ์ ์ฝ์คํ์ ์ถ๊ฐํจ- await ํํ์์์ ํ๋ก๋ฏธ์ค ๊ฒฐ๊ณผ๊ฐ
4
๋ฐํ console.log(4)
: ํจ์ ๋ด๋ถ์ ๋๊ธฐ์ ์ฝ๋ ์คํ
- await ํํ์์์ ํ๋ก๋ฏธ์ค ๊ฒฐ๊ณผ๊ฐ
์ ์ฝ๋์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ํํํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CSS] grid-row ๋์ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ (0) | 2025.06.03 |
---|---|
[HTTP] ETag ์ํฐํฐ ํ๊ทธ ํค๋ (0) | 2025.05.05 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ 6์ค๋ก ์ด๋ฏธ์ง ๋น๊ต ์ฌ๋ผ์ด๋ ๋ง๋ค๊ธฐ (0) | 2025.04.17 |
[HTTP] Cache-Control ํค๋ (0) | 2025.03.31 |
[Next.js] API ๋ผ์ฐํธ ๋ณดํธํ๊ธฐ - Unkey (0) | 2025.03.30 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[CSS] grid-row ๋์ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ
[CSS] grid-row ๋์ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ
2025.06.03 -
[HTTP] ETag ์ํฐํฐ ํ๊ทธ ํค๋
[HTTP] ETag ์ํฐํฐ ํ๊ทธ ํค๋
2025.05.05 -
[JS] ์๋ฐ์คํฌ๋ฆฝํธ 6์ค๋ก ์ด๋ฏธ์ง ๋น๊ต ์ฌ๋ผ์ด๋ ๋ง๋ค๊ธฐ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ 6์ค๋ก ์ด๋ฏธ์ง ๋น๊ต ์ฌ๋ผ์ด๋ ๋ง๋ค๊ธฐ
2025.04.17 -
[HTTP] Cache-Control ํค๋
[HTTP] Cache-Control ํค๋
2025.03.31