๐Ÿคฏ ์•ˆ๋๋‚œ ๋น„๋™๊ธฐ Async / Await ๊ฐœ๋…(with JS)

Yoonminยท2024๋…„ 12์›” 13์ผ
0

javascript

๋ชฉ๋ก ๋ณด๊ธฐ
2/3
post-thumbnail

์ œ๋ชฉ์ด ์ด๋Ÿฐ ์ด์œ ๋Š” ์•ž์— ์ ์€ Promise,๋™๊ธฐ,๋น„๋™๊ธฐ ๋‚ด์šฉ์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ
๋”ฐ๋กœ async/await๋ฅผ ์„ค๋ช…ํ•˜๊ณ ์ž,,,(์ดํ•˜ ์ƒ๋žต)

โœ… Async / Await ,,, ๋ˆ„๊ตฌ,,,?

async์™€ await๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‚˜์˜จ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.
async์™€ await์€ ๊ธฐ์กด์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ธ callback ํ•จ์ˆ˜, Promise์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

โž• Syntatic Sugar(๋ฌธ๋ฒ•์  ์„คํƒ•)๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.
Syntatic Sugar๋ž€ ์ฝ”๋“œ๋ฅผ ๋” ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ฌธ๋ฒ•์ ์ธ ํ‘œํ˜„๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

โœ… async

async๋Š” function ์•ž์— ๋ถ™์Šต๋‹ˆ๋‹ค.

async function f() {
  return 1;
}

function ์•ž์— async๋ฅผ ๋ถ™์ด๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ํ”„๋ผ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋”๋ผ๋„ resolved promise๋กœ ๊ฐ’์„ ๊ฐ์‹ธ resolved promise๊ฐ€ ๋ฐ˜ํ™˜๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด result๊ฐ€ 1์ธ resolve promise๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

async function f() {
  return 1;
}
f().then(alert); // 1

๋ช…์‹œ์ ์œผ๋กœ ํ”„๋ผ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

async function f() {
  return Promise.resolve(1);
}
f().then(alert); // 1

async๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ํ”„๋ผ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์•„๋‹Œ ๊ฒƒ์€ ํ”„๋ผ๋ฏธ์Šค๋กœ ๊ฐ์‹ธ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ์ธ await๋Š” async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

โœ… await

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” await ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด Promise๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๊ฒฐ๊ณผ๋Š” ๊ทธ ์ดํ›„ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

(await๋Š” '๊ธฐ๋‹ค๋ฆฌ๋‹คโ€™๋ผ๋Š” ๋œป์„ ๊ฐ€์ง„ ์˜๋‹จ์–ด์ž…๋‹ˆ๋‹ค).

// await๋Š” async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
let value = await promise;

Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ์•ž์— await๋ฅผ ๋ถ™์ด๋ฉด, ํ•ด๋‹น Promise์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€” ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ๊ฐ€ ๊ธฐ๋‹ค๋ ค์š”.
Promise๊ฐ€ ์„ฑ๊ณต ์ƒํƒœ ๋˜๋Š” ์‹คํŒจ ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹ค์Œ ์—ฐ์‚ฐ์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์ฃ .

โœ”๏ธ ์˜ˆ์‹œ(Toss payments)

์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋” ์‰ฌ์šด๋ฐ์š”.

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฒฐ์ œ๋ฅผ ์š”์ฒญํ•˜๋Š” requestPayment() ๋ฉ”์„œ๋“œ ์•ž์— await๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ์ œ ์š”์ฒญ์ด ์ž˜ ์™„๋ฃŒ๋˜์–ด paymentData(Promise ๊ฐ์ฒด)์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€ ์ดํ›„์—๋งŒ console.log(paymentData)๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋™๊ธฐ์ ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์ฃ .

async function handleSubmit() {
  const paymentData = await paymentWidget.requestPayment({
    orderId: "KOISABLdLiIzeM-VGU_8Z", // ์ฃผ๋ฌธ๋ฒˆํ˜ธ(์ง์ ‘ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”)
    orderName: "ํ† ์Šค ํ‹ฐ์…”์ธ  ์™ธ 2๊ฑด" // ์ฃผ๋ฌธ๋ช…(์ง์ ‘ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”)
  });
  console.log(paymentData);
  return paymentData //Promise ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์–ด์•ผ conole.log ์ •์ƒ ์ถœ๋ ฅ
}

์‚ฌ์‹ค์ƒ await๋Š” then()๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š”๋ฐ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ฒด์ด๋‹์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ผ๋„ ์—†์ฃ .

โœ”๏ธ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฒ•

๊ทผ๋ฐ ์—๋Ÿฌ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ์š”?

async/await๋กœ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ์ด์ œ ๊ฐ„๋‹จํžˆ try/catch๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” requestPayment()์—์„œ ์‹คํŒจ ์ƒํƒœ์˜ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ๋ฐ”๋กœ catch ๋ธ”๋ก์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค

async function handleSubmit() {
    try {
        const paymentData = await paymentWidget.requestPayment({
        orderId: "KOISABLdLiIzeM-VGU_8Z", // ์ฃผ๋ฌธ ID(์ง์ ‘ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”)
        orderName: "ํ† ์Šค ํ‹ฐ์…”์ธ  ์™ธ 2๊ฑด" // ์ฃผ๋ฌธ๋ช…
        });
        console.log(paymentData);
        // ์„ฑ๊ณต ์ฒ˜๋ฆฌ
        return paymentData;
    } catch (error) {
        // ์—๋Ÿฌ ์ฒ˜๋ฆฌ
        console.log(error.message);
    }
}

์ด์ƒ ์งง๊ฒŒ async await์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.
ํ† ์Šค ๊ฐœ๋ฐœํŒ€์—์„œ ์šด์˜ํ•˜๋Š” ๋ธ”๋กœ๊ทธ์—์„œ ํ•ด๋‹น ๋‚ด์šฉ์„ ์ง์ ‘ API์—ฐ๊ฒฐํ›„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ž˜ ์„ค๋ช… ํ•ด๋’€์œผ๋‹ˆ
ํ•„์š”ํ•˜์‹ ๋ถ„๋“ค์€ ์ฐธ์กฐํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„๊ฑฐ๊ฐ™๋„ค์š”!

์ถœ์ฒ˜

ํ† ์Šค ํŽ˜์ด๋จผ์ธ  ๋ธ”๋กœ๊ทธ
JAVASCRIPT Info blog

profile
'๊ฐ™์ด์˜ ๊ฐ€์น˜๋ฅผ'

0๊ฐœ์˜ ๋Œ“๊ธ€