πŸ’‘ μ˜€λŠ˜μ€ async-await, 그리고 ν•¨κ»˜ μ“°μ΄λŠ” try-catch에 λŒ€ν•΄μ„œ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


async-await

async-awaitλŠ” μ½”λ“œ μ‹€ν–‰μ˜ μˆœμ„œλ₯Ό μ •ν•΄μ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€. ν•¨μˆ˜μ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό λ”±! κ³ μ •ν•΄μ£ΌκΈ° μœ„ν•΄μ„œλΌκ³  μƒκ°ν•˜λ©΄ μ‰¬μšΈ κ±°μ—μš” :)

μž₯점은, 기쑴의 callback function, Promise와 같은 비동기 처리 λ°©μ‹μ˜ 단점을 λ³΄μ™„ν•˜κ³  κ°œλ°œμžκ°€ 읽기 쒋은 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

async function logName() {
	var user = await fetchUser('domain.com/users/1');

	// await둜 μˆœμ„œλ₯Ό μ •ν•΄μ€€ ꡬ문이 μ™„λ£Œλ˜μ–΄μ•Ό μ‹€ν–‰λ©λ‹ˆλ‹€.
	if (user.id === 1) console.log(user.name);
}


μ™œ μ‚¬μš©ν•˜λ‚˜μš”?

λ„€νŠΈμ›Œν¬λ‚˜ νŒŒμΌμ‹œμŠ€ν…œμ— μ ‘κ·Όν•˜λŠ” 것과 같은 무거운 μž‘μ—…μ„ ν•˜λŠ” 경우 μ–΄λ–€ μž‘μ—…λΆ€ν„° μ‹€ν–‰ν•˜λŠ”μ§€ 우린 μ•Œμˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” Javascript의 λΉ„λ™κΈ°λΌλŠ” νŠΉμ§• λ•Œλ¬Έμž…λ‹ˆλ‹€.

  1. μ™ΈλΆ€ API μž‘μ—…
  2. μ•±μ˜ 경우, μœ„μΉ˜ 정보 κΆŒν•œκ³Ό 같은 νœ΄λŒ€ν° 자체의 κΈ°λŠ₯

μ •λ¦¬ν•΄μ„œβ— ν•¨μˆ˜μ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό κΌ­ μ§€μΌœμ•Ό ν•˜λŠ” λΆ€λΆ„μ—μ„œ 즉 ν•¨μˆ˜μ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό κ³ μ •ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것이 async-awaitμž…λ‹ˆλ‹€. 비동기 처리 방식인 것을 λ™κΈ°μ²˜λ¦¬λ₯Ό ν•΄μ£ΌκΈ° μœ„ν•΄μ„œμš”!


async-await κΈ°λ³Έ 문법

  • 일반적으둜, awaitκ°€ μ μš©λ˜λŠ” 비동기 처리 μ½”λ“œλŠ” Promiseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    async function ν•¨μˆ˜λͺ…() {
      await 비동기 처리 λ©”μ„œλ“œ λͺ…()
    }
    


async-await μ‹€μš© 예제

// μ‚¬μš©μž 정보가 λ‹΄κΈ΄ Promise 객체 λ°˜ν™˜
function fetchUser() {
	var url = 'https://url/users/1';
	return fetch(url).then(function(response) {
		return response.json();
	})
}

// ν•  일 정보가 λ‹΄κΈ΄ Promise 객체 λ°˜ν™˜
function fetchTodo() {
	var url = 'https://url/todos/1';
	return fetch(url).then(function(response) {
		return response.json();
	})
}

// 할일 제λͺ© 좜λ ₯
async function logTodoTitle() {
	var user = await fetchUser();
	if (user.id === 1) {
		var todo = await fetchTodo();
		console.log(todo.title);
	}
}


try-catch

try-catchλŠ” μ—λŸ¬λ°©μ§€ μ½”λ“œλ‘œ 주둜 APIλ₯Ό μš”μ²­ν•  λ•Œ 자주 μ‚¬μš©λ©λ‹ˆλ‹€.

μž‘μ—…μ„ ν•  λ•Œ API ν˜ΈμΆœμ„ μ œλŒ€λ‘œ ν–ˆμ„μ§€λΌλ„, μ„œλ²„μΈ‘μ—μ„œ ν˜Ήμ€ νœ΄λŒ€ν°κ³Ό 같은 κΈ°κΈ° μžμ²΄μ—μ„œ λ“± μ™Έμ μœΌλ‘œ 였λ₯˜κ°€ λ°œμƒν•  μˆ˜κ°€ μžˆλŠ”λ°, 이런 상황듀을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ½”λ“œμž…λ‹ˆλ‹€.

  • try{}μ—μ„œλŠ” API μš”μ²­μ„ μœ„ν•œ μž‘μ—… μ½”λ“œ μ •μ˜ν•©λ‹ˆλ‹€.
  • catch{}μ—μ„œλŠ” μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ μ‹€ν–‰ν•  μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. (μ–΄λ–€ μ—λŸ¬κ°€ λ‚¬λŠ”μ§€ 확인할 수 있고 μ—λŸ¬μ²˜λ¦¬, ν›„μ†μ²˜λ¦¬λ₯Ό 해쀄 수 μžˆμŠ΅λ‹ˆλ‹€.)
async function logTodoTitle() {
	try {
		var user = await fetchUser()
		if (user.id === 1) {
			var todo = await fetchTodo()
			console.log(todo.title)
		}
	} catch (error) {
		console.log(error)
	}
}