특징
비동기 함수는 일반 함수나 화살표 함수와 아주 비슷하지만 두 가지가 다릅니다.
- 비동기 함수의 결과 값은 항상 Promise 객체로 resolve된다.
- 비동기 함수 안에서만 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 연산자를 사용하면 Promise가 fulfill 상태가 되거나 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 |