프론트엔드/javascript

자바스크립트 - async, await

2023. 4. 11. 20:21
목차
  1. async
  2. await

저번글에서 promise에 대해 공부했습니다.

async, await를 사용하면 promise의 then메소드를 chain형식으로 호출하는 것보다 가독성이 좋아집니다.

 

async

아래와 같은 함수가 있다고 가정합시다. 이 함수 앞에 async라는 키워드를 붙여주게 되면 

해당 함수는 항상 promise를 반환하게 됩니다.

async function getName(){
    return "Mike";
}
console.log(getName());

promise를 반환하기 때문에 then을 사용할 수 있습니다.

 

async function getName(){
    return Promise.resolve("Tom");
}

getName().then((name)=>{
    console.log(name);
});

반환값이 prmoise면 값을 그대로 사용합니다.

그리고 함수내부에서 예외가 발생하면 rejectd상태의 promise가 반환됩니다. 

async function getName(){
    throw new Error("err..");
}

getName().catch((err)=>{
    console.log(err);
});

 

await

await 키워드는 async 함수 내부에서만 사용할 수 있습니다.

function getName(name){
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve(name);
        },1000);
    });
}

async function showName(){
    const result = await getName('Mike');
    console.log(result);
}

console.log('시작');
showName();

getName이라는 프로미스의 결과가 반환될 때 까지 기다렸다가 console.log 함수를 통해 출력해줍니다.

 

이제 이전시간의 promise코드에 async/await를 적용해보겠습니다.

이전코드입니다.

const f1 = (message) => {
	return new Promise((res,rej)=>{
      setTimeout(function() {
        res("1번 주문 완료");
      },1000);
    });
};
const f2 = (message) => {
  	console.log(message);
	return new Promise((res,rej)=>{
      setTimeout(function() {
        res("2번 주문 완료");
      },3000);
    });
};
const f3 = (message) => {
  	console.log(message);
	return new Promise((res,rej)=>{
      setTimeout(function() {
        res("3번 주문 완료");
      },2000);
    });
};

console.log("시작");
f1
.then(res => f2(res))
.then(res => f3(res))
.then(res => console.log(res));
.catch(console.log)
.finally(()=>{
	console.log("끝");
})

이를 수정해보겠습니다.

console.log("시작");
async function order() {
  	try {
      const result1 = await f1();
      const result2 = await f2(result1);
      const result3 = await f2(result2);
      console.log(result3);
    }catch(e){
    	console.log(e);
    }
  	console.log("종료");
}

order();

위처럼 작성할수 있고 promise에서는 catch로 error를 처리해주었는데

여기서는 try catch문을 이용하여 error를 처리 해야합니다. 확실히 가독성이 더 좋아진걸 볼 수 있습니다. 

결과입니다. 동일하게 잘 나옵니다. 

 

'프론트엔드 > javascript' 카테고리의 다른 글

자바스크립트 - DOM & EVENT 노드에 접근하기  (0) 2023.04.12
실용 자바스크립트  (0) 2023.04.12
자바스크립트 - 프로미스(Promise)  (0) 2023.04.11
자바스크립트 - 클래스(Class)  (0) 2023.04.10
자바스크립트 - 상속,프로토타입(Prototype)  (0) 2023.04.10
  1. async
  2. await
'프론트엔드/javascript' 카테고리의 다른 글
  • 자바스크립트 - DOM & EVENT 노드에 접근하기
  • 실용 자바스크립트
  • 자바스크립트 - 프로미스(Promise)
  • 자바스크립트 - 클래스(Class)
최맹수
최맹수
맹수개발최맹수 님의 블로그입니다.
최맹수
맹수개발
최맹수
전체
오늘
어제
  • 분류 (236)
    • 로우코드(Lowcode) (53)
      • outsystems (35)
      • OutSystems프로젝트 (18)
      • Mendix (0)
    • 프론트엔드 (0)
      • html (0)
      • css (3)
      • javascript (68)
      • react (47)
      • typescript (7)
    • 정보처리기사 (20)
      • 실기 (16)
    • 공부 (9)
    • Git (5)
    • 백엔드 (21)
      • node.js(express) (20)
    • 자바 (1)
      • java (1)
      • Spring (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 아웃시스템즈
  • dom
  • lowcode
  • 정보처리기사실기
  • 배열
  • 함수
  • javscript
  • aggreagtes
  • react
  • typescript
  • kiosk
  • outsystems
  • 로우코드
  • 프로젝트
  • await
  • Promise
  • 프론트엔드
  • javascript
  • 정보처리기사
  • 자바스크립트

최근 댓글

최근 글

hELLO · Designed By 정상우.
최맹수
자바스크립트 - async, await
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.