๐จ๐ป ๋น๋๊ธฐ? ๋น๋๊ธฐ์ ๋๊ธฐํ?
javascript๋ฅผ ๋ฐฐ์ฐ๋ค๋ณด๋ฉด ๋น๋๊ธฐ๋ฅผ ์ ํ๊ฒ ๋๋๋ฐ, ์ด๋ promise๋ผ๋ object๋ฅผ ์ ํ๊ฒ ๋๋ค.
promise๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๋ณต์กํ๋ค๋ ๊ฒ์ ์๊ฒ๋๊ณ , promise ๊ฐ์ฒด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด async/await์ ๋ฐฐ์ฐ๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด async/await๊ฐ ํญ์ ์ข์ ๋ฐฉ์์ผ๊น?
๐ ๋น๋๊ธฐ์๋ ์์๊ฐ ๋ณด์ฅ๋์ด์ผ ํ๋ ๋น๋๊ธฐ๊ฐ ์๊ณ , ์์์ ๋ณด์ฅ์ด ํ์์๋ ๋น๋๊ธฐ๊ฐ ์๋ค.
๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ๋ณด์
๋น๋๊ธฐ ์์
A,B,C๊ฐ ์๋ค.
A๋ 1์ด
B๋ 3์ด
C๋ 2์ด๊ฐ ๊ฑธ๋ฆด ๋, ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ ๊น?
๋ง์ฝ ํด๋น ๋น๋๊ธฐ ์์
์ด ์์๊ฐ ๋ณด์ฅ๊ฐ ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํ๋ก์ธ์ค ์งํ ๊ณผ์ ์ ๋ํ๋ผ ์ ์๋ค.
์ด -----1-----2-----3-----4-----5-----6
=====O A
=================O B
===========O C
โ๏ธ ์์๊ฐ ๋ณด์ฅ๋์ด์ผ ํ๋ ๋น๋๊ธฐ ์์ ๊ฒฝ์ฐ 6์ด๊ฐ ๊ฑธ๋ฆฐ๋ค.
๋ง์ฝ ํด๋น ๋น๋๊ธฐ ์์ ์ด ์์๊ฐ ๋ณด์ฅ๊ฐ ๋์ง ์์๋ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ํ๋ก์ธ์ค ์งํ ๊ณผ์ ์ ๋ํ๋ผ ์ ์๋ค.
์ด -----1-----2-----3
=====O A
=================O B
===========O C
โ๏ธ ์์๊ฐ ๋ณด์ฅ๋์ง ์์๋ ๋๋ ๋น๋๊ธฐ ์์
๊ฒฝ์ฐ 3์ด๊ฐ ๊ฑธ๋ฆฐ๋ค.
๋น๋๊ธฐ ์ง์ฐ - Promise
์ค์ ๋ก ์์ ๋ฅผ ๋ง๋ค์ด ๋ณด๊ธฐ ์ํด ๋น๋๊ธฐ ํจ๊ณผ๋ฅผ ๋ด๋ timer ํจ์๋ฅผ ๋ง๋ค์ด๋ณด์.
async function timer(ms) {
await new Promise((r) => setTimeOut(r, ms));
console.log(`time : ${ms}`);
}
์ด ํจ์๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ์ด๋ค ๋น๋๊ธฐ API๋ฅผ ํธ์ถ ํ์ ๋ API์ ์ฒ๋ฆฌ ์๊ฐ์ ms
๋ก ๋ฐ์๋ด์ด ์ํ์๊ฐ์ ์ ์ํ ์ ์๋ค.
promise.all๊ณผ for-await
์ด์ ์์ ํจ์๋ฅผ ์ด์ฉํ์ฌ promise.all์ for-await์ ๋์์์ผ๋ณด์.
const arr = [1000, 3000, 2000];
await Promise.all(arr.map(async (ms) => await timer(ms)));
time: 1000;
time: 2000;
time: 3000;
const arr = [1000, 3000, 2000];
for (let i = 0; i < arr.length; i++) {
await timer(arr[i]);
}
time: 1000;
time: 3000;
time: 2000;
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฆ์ ์ ์ ์๋ค.
์ฆ, promise.all์ ์ด์ฉํ๋ฉด ์์๋ฅผ ๋ณด์ฅํ์ง ์์ ์ฑ๋ก ๋น๋๊ธฐ๋ฅผ ์งํํ์๊ณ , async/await๋ฅผ ์ด์ฉํ๋ฉด ์์๋ฅผ ๋ณด์ฅํ๋ฉฐ ๋น๋๊ธฐ๋ฅผ ์งํํ์๋ค.
๋ฐ๋ผ์ ํน์ ๋น๋๊ธฐ ์์ ์ด ์์๋ฅผ ๋ณด์ฅํ์ง ์์๋ ๋๋ค๋ฉด ๊ตณ์ด async/await๋ฅผ ํตํด ์๊ฐ์ ๋ญ๋น์ํค์ง ๋ง๊ณ promise.all์ ์ฐ๋ ๋ฐฉ์์ ์ด์ฉํด๋ณด์.
'Basic > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] Spread syntax ๋? (0) | 2022.11.13 |
---|---|
๋ฐฐ์ด ๋ช๊ฐ์ง ๋ด์ฅ ํจ์๋ค (0) | 2022.10.31 |
JSON object์ key ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2022.03.24 |
[nodejs] request entity too large ๋ฌธ์ ํด๊ฒฐ (0) | 2022.03.18 |
Javascript๋ก ํ ์คํธ ํด๋ฆฝ๋ณด๋ ๋ง๋ค๊ธฐ (0) | 2022.01.24 |