[React.js] React 사용을 위한 자바스크립트 응용 - async & await

2022. 4. 30. 23:44·공부/React.js
반응형

 

React 게시글은 대부분 인프런의 '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지' 강의를 기반으로 내용을 정리했습니다.

async

async는 function 키워드 앞에 선언한다.

async function helloAsync() {
  return 'hello Async';
}

function 앞에 async를 붙이면 해당 함수의 return 값은 항상 Promise 객체를 반환하게 된다. 위의 함수의 경우는 return값이 Promise가 아니지만 놀랍게도 async를 붙여주면 이행 상태의 Promise(resolved promise)로 값을 감싸 반환된다.

 

async function helloAsync() {
  return 'hello Async';
}

console.log(helloAsync());
/*
Promise {<pending>}
	<constructor>: "Promise"
		name: "Promise"
*/

Promise 객체로 반환되면? 당연히 then()도 사용할 수 있게 된다.

async function helloAsync() {
  return "hello Async";
}

helloAsync().then((res)=> {
  console.log(res);
});
반응형

await

await은 Promise 처리가 될 때까지 기다리고 결과는 그 이후에 반환된다. 예시를 위해 delay()라는 함수를 만들고 helloAsync()를 입력받은 숫자만큼 지연시켜 출력하는 프로그램을 만들어보자.

function delay(ms) {
  return new Promise((reslove) => {
    setTimeout(reslove,ms)
  });
}

async function helloAsync() {
  return delay(3000).then(()=> {
    return "hello Async";
  });
}

helloAsync().then((res)=> {
  console.log(res);
});

이렇게하면 3초동안 기다린 후 helloAsync의 처리가 완료된다. 여기에서 await을 사용하면 좀 더 간략하게 코드를 작성할 수 있다.

function delay(ms) {
  return new Promise((reslove) => {
    setTimeout(reslove,ms)
  });
}

async function helloAsync() {
  await delay(3000);
  return 'hello async';
}

helloAsync().then((res)=> {
  console.log(res);
});

await은 말 그대로 Promise가 처리될 때까지 함수 실행을 기다리게 한다. Promise가 처리되면 그 결과와 함께 실행이 된다. Promise가 처리되길 기다리는 동안에는 엔진이 다른 일을 할 수 있기 때문에 CPU 리소스 낭비가 되지 않는다.
예제를 보면 await delay(3000);이 있는데 delay 앞에 await이 붙어 있어 delay가 끝나기 전까지는 그 다음 줄인 return문이 실행되지 않는다. 즉 await가 붙은 코드는 동기적으로 사용될 수 있다는 것이다.

참고로 await은 async가 붙은 함수에서만 사용할 수 있다.

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/React.js' 카테고리의 다른 글
  • [React.js] React 사용을 위한 Node.js - Node.js란?
  • [React.js] React 사용을 위한 자바스크립트 응용 - API & fetch
  • [React.js] React 사용을 위한 자바스크립트 응용 - Promise
  • [React.js] React 사용을 위한 자바스크립트 응용 - 동기&비동기
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    egov
    react
    SQL
    방통대
    토이프로젝트
    넥사크로
    Spring
    스프링부트
    전자정부프레임워크
    백준
    oracle
    개발자
    springboot
    운영체제
    자바스크립트
    SpringBoot를 이용한 RESTful Web Service 개발
    RESTful
    QueryDSL
    토비의스프링부트
    에러해결
    프로그래머스
    기출문제
    코딩테스트
    MSA
    프론트엔드
    JPA
    인프런
    알고리즘
    IT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[React.js] React 사용을 위한 자바스크립트 응용 - async & await
상단으로

티스토리툴바