본문 바로가기
Language/Javascript

비동기 함수 (Async Function)

by 노믹 2022. 12. 12.

특징

비동기 함수는 일반 함수나 화살표 함수와 아주 비슷하지만 두 가지가 다릅니다.

  1. 비동기 함수결과 값항상 Promise 객체로 resolve된다.
  2. 비동기 함수 안에서만 await 연산자를 사용할 수 있다.

이 두 가지 특징을 제외하면 기존처럼 일반 함수나, 화살표 함수처럼 사용할 수 있습니다.

아래 세 가지 함수 모두 결과 값은 Promise로 받습니다.

// 비동기 + 일반 함수
async function 함수이름() {
	// 명령문
}

// 비동기 + 익명 함수
async function() {
  // 명령문
}

// 비동기 + 화살표 함수
async () => {
	// 명령문
}
  • 이러한 특징은 마치 아래처럼 작성하는 것과 굉장히 비슷합니다.
function 함수이름() {
	return Promise.resolve('값');
}

// 위와 아래의 함수는 같은 동작을 보여준다.

async function 함수이름2() {
	return '값';
}

함수이름();
// Print: Promise { '값' }

함수이름2();
// Print: Promise { '값' }

 

  • 그럼 비동기 함수는 왜 쓸까요?

await 연산자를 비동기 함수 안에서만 사용할 수 있습니다. 이를 활용하면 문법이 훨씬 간결해질 수 있습니다.

덕분에 비동기 함수는 비동기 프로그래밍을 하게 되면 즐겨 사용하는 함수 유형중 하나가 될 것입니다.

 

  • new Promise(excutor) 코드로 Promise를 직접 생성하면 executor가 바로 실행되는 것과 달리, 비동기 함수는 함수가 실행되기 전까지 Promise를 생성하지 않습니다.

await 연산자

  • await 연산자를 사용하면 Promisefulfill 상태가 되거나 rejected 될 때까지 함수의 실행을 중단하고 기다릴 수 있습니다.
    Promise의 연산이 끝나면 함수에서 반환한 값을 얻을 수 있습니다.
    동기적으로 관리할 수 있는 함수입니다.
  • await 연산자는 async 함수 안에서만 사용할 수 있습니다.
  • 인터페이스
const result = await 값;
  • "값"에는 Promise가 아닌 다른 값도 들어갈 수 있습니다.
    Promise가 아니라면 기다리지 않고 해당 값 자체를 그대로 반환합니다.
async function 함수이름() {
	const result = await 'Test!';
	console.log(result);
}

함수이름();
// Print: 'Test!';

 

'Language > Javascript' 카테고리의 다른 글

에러 핸들링 (Error handling)  (0) 2022.12.12
객체 리터럴  (0) 2022.12.12
프로미스(Promise)  (0) 2022.12.12
동기(Sync) & 비동기(Async)  (0) 2022.12.12
JavaScript란?  (0) 2022.12.12