์ ๋ชฉ์ด ์ด๋ฐ ์ด์ ๋ ์์ ์ ์ Promise,๋๊ธฐ,๋น๋๊ธฐ ๋ด์ฉ์ด ๋๋ฌด ๊ธธ์ด์ ธ
๋ฐ๋ก async/await๋ฅผ ์ค๋ช
ํ๊ณ ์,,,(์ดํ ์๋ต)
async์ await๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจํด ์ค ๊ฐ์ฅ ์ต๊ทผ์ ๋์จ ๋ฌธ๋ฒ์ ๋๋ค.
async์ await์ ๊ธฐ์กด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ธ callback ํจ์, Promise์ ๋จ์ ์ ๋ณด์ํ๊ณ ๊ฐ๋ฐ์๊ฐ ์ฝ๊ธฐ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋์์ค๋๋ค.
โ Syntatic Sugar(๋ฌธ๋ฒ์ ์คํ)๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
Syntatic Sugar๋ ์ฝ๋๋ฅผ ๋ ์๊ธฐ ์ฝ๊ฒ ์์ฑํ๊ณ ์ดํดํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ฌธ๋ฒ์ ์ธ ํํ๋ฐฉ์์ ๋๋ค.
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 ํค์๋๋ฅผ ๋ง๋๋ฉด Promise๊ฐ ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ ๊ทธ ์ดํ ๋ฐํ๋ฉ๋๋ค.
(await๋ '๊ธฐ๋ค๋ฆฌ๋คโ๋ผ๋ ๋ป์ ๊ฐ์ง ์๋จ์ด์ ๋๋ค).
// await๋ async ํจ์ ์์์๋ง ๋์ํฉ๋๋ค. let value = await promise;
Promise๋ฅผ ๋ฐํํ๋ ํจ์ ์์ await๋ฅผ ๋ถ์ด๋ฉด, ํด๋น Promise์ ์ํ๊ฐ ๋ฐ๋ ๋๊น์ง ์ฝ๋๊ฐ ๊ธฐ๋ค๋ ค์.
Promise๊ฐ ์ฑ๊ณต ์ํ ๋๋ ์คํจ ์ํ๋ก ๋ฐ๋๊ธฐ ์ ๊น์ง๋ ๋ค์ ์ฐ์ฐ์ ์์ํ์ง ์๋ ๊ฒ์ด์ฃ .
์์๋ฅผ ๋ณด๋ฉด ๋ ์ฌ์ด๋ฐ์.
์๋์ ๊ฐ์ด ๊ฒฐ์ ๋ฅผ ์์ฒญํ๋ 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์ฐ๊ฒฐํ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์ ์ค๋ช
ํด๋์ผ๋
ํ์ํ์ ๋ถ๋ค์ ์ฐธ์กฐํด์ฃผ์๋ฉด ์ข์๊ฑฐ๊ฐ๋ค์!