๋ฐ˜์‘ํ˜•

๐Ÿ‘จ‍๐Ÿ’ป ๋น„๋™๊ธฐ? ๋น„๋™๊ธฐ์˜ ๋™๊ธฐํ™”?

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์„ ์“ฐ๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•ด๋ณด์ž.

๋ฐ˜์‘ํ˜•