๐Ÿคฟ (6) ์ฝœ๋ฐฑ(Callback) ํ•จ์ˆ˜, ํ”„๋ผ๋ฏธ์Šค(Promise) ๊ฐ์ฒด, async/await ๊ตฌ๋ฌธ

Kayยท2023๋…„ 3์›” 10์ผ
0

Javascript

๋ชฉ๋ก ๋ณด๊ธฐ
7/12

์ €๋ฒˆ ๊ธ€ โ€œ(5) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ• ๊นŒ? ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ• ๊นŒ?โ€์„ ๊ฐ„๋‹จํžˆ ๋ณต์Šตํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ฝ์–ด๊ฐ€๋ฉฐ ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ,
๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์  ํŠน์„ฑ ์ƒ ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์šฉ์ž ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด

์ด๋ฏธ์ง€, API ๋“ฑ ๋ชจ๋“  ๊ฒƒ์„ ๋กœ๋”ฉ ํ•˜๊ธฐ ์ „ ์šฐ์„ ์ ์œผ๋กœ ๋กœ๋”ฉ๋œ ๊ฒƒ๋“ค์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ์ œ์–ด(?)ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ฝœ๋ฐฑ(callback), ํ”„๋กœ๋ฏธ์Šค(promise), async/await ๋“ฑ์ด ์žˆ๋‹ค.
(โ€œ์ œ์–ดโ€๋ผ๊ณ  ํ‘œํ˜„ํ•œ ๋ถ€๋ถ„์ด ์ ํ•ฉํ•  ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ์˜๋„ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— โ€œ์ œ์–ดโ€๋ผ๊ณ  ํ‘œํ˜„ํ•ด๋ณด์•˜๋‹ค.)

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์ฝœ๋ฐฑ, ํ”„๋กœ๋ฏธ์Šค(promise), async/await์— ๋Œ€ํ•ด ํ•™์Šตํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

์ฝœ๋ฐฑ(Callback)

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋‚˜์ค‘์— ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋น„๋™๊ธฐ ๋™์ž‘์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

๋น„๋™๊ธฐ ๋™์ž‘์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ณ  ์‹ค์ˆ˜ํ•œ ์ฝ”๋“œ

// GET ์š”์ฒญ์œผ๋กœ title ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
const getTitle = () => {
    $.ajax({
        types: "GET",
				// fake api๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋žซํผ์ธ {JSON} Placeholder
        url: "https://jsonplaceholder.typicode.com/posts/1",
    }).then((data) => {
        return data.title
    })
}

// title ๋ฐ์ดํ„ฐ๋ฅผ localStorage์— ์ €์žฅํ•˜๋Š” ๋ฉ”์„œ๋“œ
const setTitle = (title) => {
    localStorage.setItem('title', title);
}

const title = getTitle();
setTitle(title);

jQuery์˜ API ์š”์ฒญ์„ ์œ„ํ•œ ajax ํ•จ์ˆ˜๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ๋น„๋™๊ธฐ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ getTitle()ํ•จ์ˆ˜์—์„œ API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•˜๊ธฐ ์ „์—

setTitle() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ๊ฒฐ๊ณผ์ ์œผ๋กœ localStorage์— undefined๊ฐ€ ์ €์žฅ๋˜์—ˆ๋‹ค.

์ด๋ฅผ ์ฝœ๋ฐฑ(Callback)์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ?

// GET ์š”์ฒญ์œผ๋กœ title ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
// ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ callback ํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ajax ์š”์ฒญ์ด ๋๋‚ฌ์„ ๋•Œ (then ์ ˆ์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ)
// callback ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.
const getTitle = (callback) => {
    $.ajax({
        types: "GET",
				// fake api๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋žซํผ์ธ {JSON} Placeholder
        url: "https://jsonplaceholder.typicode.com/posts/1",
    }).then((data) => {
				callback(data.title);
    })
}

// title ๋ฐ์ดํ„ฐ๋ฅผ localStorage์— ์ €์žฅํ•˜๋Š” ๋ฉ”์„œ๋“œ
const setTitle = (title) => {
    localStorage.setItem('title', title);
}

// ์ฝœ๋ฐฑํ•จ์ˆ˜์ธ setTitle์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธด๋‹ค.
getTitle(setTitle);

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฝœ๋ฐฑ์ง€์˜ฅ

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด getTitle() โ†’ setTitle() ์ˆœ์„œ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

๋งŒ์•ฝ, getTitle() โ†’ setTitle() โ†’ changeBrowserTitle() โ†’ โ€ฆ.. ์ด์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

// GET ์š”์ฒญ์œผ๋กœ title ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ
// ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ callback ํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ajax ์š”์ฒญ์ด ๋๋‚ฌ์„ ๋•Œ (then ์ ˆ์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ)
// callback ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.
const getTitle = (callback) => {
    $.ajax({
        types: "GET",
				// fake api๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋žซํผ์ธ {JSON} Placeholder
        url: "https://jsonplaceholder.typicode.com/posts/1",
    }).then((data) => {
				callback(data.title);
    })
}

// title ๋ฐ์ดํ„ฐ๋ฅผ localStorage์— ์ €์žฅํ•˜๋Š” ๋ฉ”์„œ๋“œ
const setTitle = (title, callback) => {
    localStorage.setItem('title', title);
		callback();
}

// ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰๋˜์–ด์•ผ ํ•  ๋ฉ”์„œ๋“œ
const changeBrowserTitle = (callback) => {
		callback();
}

// ๊ฐ๊ฐ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธด๋‹ค.
getTitle(setTitle(changeBrowserTitle(...)));

์ด๋ ‡๊ฒŒ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์•ˆ์— ์ฝœ๋ฐฑ์„ ์ค‘์ฒฉ๋˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ ์  ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ์ฝ๊ธฐ ์–ด๋ ค์›Œ ์ง€๋Š”๋ฐ, ์ด๋ฅผ โ€œ์ฝœ๋ฐฑ ์ง€์˜ฅโ€์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ Promise ๊ฐ์ฒด ๋˜๋Š” async/await ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

Promise ๊ฐ์ฒด

Promise ๊ฐ์ฒด๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ๋Œ€๊ธฐ ์ค‘ (Pending): ๋น„๋™๊ธฐ ์ž‘์—…์ด ์•„์ง ์ˆ˜ํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ
  • ์ดํ–‰๋จ (Fulfilled): ๋น„๋™๊ธฐ ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ์ƒํƒœ
  • ๊ฑฐ๋ถ€๋จ (Rejected): ๋น„๋™๊ธฐ ์ž‘์—…์ด ์‹คํŒจํ•œ ์ƒํƒœ

Promise ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

const promise = new Promise((resolve, reject) => {
  // ๋น„๋™๊ธฐ ์ž‘์—… ์ˆ˜ํ–‰
  // ์„ฑ๊ณต ์‹œ resolve() ํ˜ธ์ถœ, ์‹คํŒจ ์‹œ reject() ํ˜ธ์ถœ
});

promise.then(() => {
  // ์„ฑ๊ณต ์‹œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
}).catch(() => {
  // ์‹คํŒจ ์‹œ ์‹คํ–‰ํ•  ์ฝ”๋“œ
}).finally(() => {
	// ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ณ  ๊ฒฐ๊ณผ์— ์ƒ๊ด€์—†์ด ์‹คํ–‰ํ•  ์ฝ”๋“œ
});

Promise ์ฒด์ด๋‹

์ฝœ๋ฐฑ ์ง€์˜ฅ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ–ˆ์„ ๋•Œ Promise ๊ฐ์ฒด๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

promise
	.then((result) => {
	  // ์„ฑ๊ณต ์ฒซ๋ฒˆ์งธ๋กœ ์‹คํ–‰ํ•  ์ฝ”๋“œ
	}).then((result) => {
	  // ์„ฑ๊ณต ๋‘๋ฒˆ์งธ๋กœ ์‹คํ–‰ํ•  ์ฝ”๋“œ
	}).then((result) => {
		// ์„ฑ๊ณต ์„ธ๋ฒˆ์งธ๋กœ ์‹คํ–‰ํ•  ์ฝ”๋“œ
	}).catch((error) => {
		// ์œ„ then ์ ˆ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฑฐ๋ถ€๋˜๋ฉด ์—๋Ÿฌ๋ฅผ ์žก๋Š” ์ฝ”๋“œ
	});

๊ฐ๊ฐ์˜ then ์ ˆ์—์„œ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ result ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋ผ๋ฏธ์Šค executor์™€ ํ”„๋ผ๋ฏธ์Šค ํ•ธ๋“ค๋Ÿฌ ์ฝ”๋“œ ์ฃผ์œ„์—” '๋ณด์ด์ง€ ์•Š๋Š”(์•”์‹œ์ )ย try..catch๊ฐ€ ์žˆ๋Š”๋ฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์—๋Ÿฌ๋ฅผ ์žก์„ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ฒด์ธ์˜ ๋งˆ์ง€๋ง‰ catch ์ ˆ์—์„œ ์ด์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์ด ์—†๋‹ค๋ฉด?

์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์ด ์—†๋‹ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฃฝ๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํ”„๋ผ๋ฏธ์Šค ๊ฑฐ๋ถ€๋ฅผ ์ถ”์ ํ•˜๋‹ค๊ฐ€ ์ „์—ญ ์—๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (์—๋Ÿฌ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์€ ์•ž์œผ๋กœ ๊ผญ ๋ถ™์ด๋Š”๊ฑธ๋กœ!)

๋งŒ์•ฝ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์— Promise ๊ฐ์ฒด์™€ ์ผ๋ฐ˜ ํ•จ์ˆ˜๊ฐ€ ๊ฐ™์ด ์กด์žฌํ•œ๋‹ค๋ฉด ์ˆœ์„œ๋Š”?

function func() {
	let promise = Promise.resolve();

	promise.then(() => alert("ํ”„๋ผ๋ฏธ์Šค ์„ฑ๊ณต!"));

	alert("์ฝ”๋“œ ์ข…๋ฃŒ");
}

func();

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ promise ๊ตฌ๋ฌธ์€ ๋ฐ”๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰๋  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋จผ์ € ๋œจ๋Š” alert ๋ฉ”์‹œ์ง€๋Š” โ€œ์ฝ”๋“œ ์ข…๋ฃŒโ€์ด๋‹ค.

๊ทธ ์ด์œ ๋Š” ์ „ ํฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋งŒ์•ฝ setTimeout ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„์— ํ•ด๋‹นํ•˜๋Š” ์ธ์ž๊ฐ€ 0์ด๋ผ๊ณ  ํ•˜๋”๋ผ๋„ โ€œ์‹œ์ž‘โ€ โ†’ โ€œ๋โ€ โ†’ โ€œ๋™์ž‘โ€ ์ˆœ์œผ๋กœ ์ถœ๋ ฅ์ด ๋œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๋™์ž‘ ์ˆœ์„œ์— ์˜ํ•ด setTimeout, Promise ๊ฐ์ฒด ์ฝ”๋“œ ๋“ฑ ๋น„๋™๊ธฐ ๋™์ž‘์„ ํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ด๋™ํ•˜์—ฌ ์ž‘์—…์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ
  • โ†’ ์ฝœ๋ฐฑ ํ(Callback Queue)(ํƒœ์Šคํฌ ํ(Task Queue) ๋˜๋Š” ๋งˆ์ดํฌ๋กœํƒœ์Šคํฌ ํ(Microtask Queue))๋กœ ์ด๋™
  • โ†’ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์ด๋™
  • โ†’ ์‹คํ–‰

์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

๋”ฐ๋ผ์„œ ์›๋ž˜ ์˜ˆ์‹œ๋กœ ๋Œ์•„์™€ alert(โ€์ฝ”๋“œ ์ข…๋ฃŒโ€) ์˜ ๊ฒฝ์šฐ ๋ฐ”๋กœ ํ˜ธ์ถœ์Šคํƒ์—์„œ ์‹คํ–‰๋˜์–ด ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์šฐ์„ ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

async/await ๊ตฌ๋ฌธ

async/await ๊ตฌ๋ฌธ์€ Promise ๊ฐ์ฒด๋ฅผ ๋”์šฑ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

async ํ•จ์ˆ˜๋Š” Promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, await ๊ตฌ๋ฌธ์€ Promise ๊ฐ์ฒด๊ฐ€ ์ดํ–‰๋  ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•œ๋‹ค.

function ์•ž์— async ๋ฅผ ๋ถ™์ด๊ณ , ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๊ธธ ๋ฐ”๋ผ๋Š” ํ•จ์ˆ˜ ์•ž await ๋ฅผ ๋ถ™์ด๋ฉด async/await ๊ตฌ๋ฌธ์ด ๋œ๋‹ค.

async function myFunction() {
  try {
    const result = await promise; // promise ๊ฐ์ฒด๊ฐ€ ์ดํ–‰๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
    // result๋ฅผ ์ด์šฉํ•œ ์ž‘์—… ์ˆ˜ํ–‰
  } catch (error) {
    // ์—๋Ÿฌ ์ฒ˜๋ฆฌ
  }
}

async/await ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด Promise ๊ฐ์ฒด๋ฅผ ๋”์šฑ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—๋Ÿฌ ์ฒ˜๋ฆฌ

await/async ๊ตฌ๋ฌธ์€ ์œ„ ์˜ˆ์‹œ์ฝ”๋“œ์ฒ˜๋Ÿผ tryโ€ฆcatch ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ถœ์ฒ˜

velog - Javascript๋Š” ๋™๊ธฐ์ผ๊นŒ? ๋น„๋™๊ธฐ์ผ๊นŒ?
velog - ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ callback ํ•จ์ˆ˜
javascript info - ํ”„๋ผ๋ฏธ์Šค์™€ async, await
๊ฐœ์ธ๋ธ”๋กœ๊ทธ - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Promise ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

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