기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

FrontEnd/React 심화

[React] Async & Await란?

2022. 3. 7. 21:37
반응형

 

1. Async & Await란?

React에서 비동기 처리를 할때 Promise를 사용하지만 Promise의 단점을 보완하기 위해 ES7에서 async와 await라는 키워드가 추가 되었습니다.

위 키워드를 사용하면 비동기 코드를 마치 동기 코드 처럼 보이게 작성할 수가 있게 되었습니다.

 

 

 

2. Async 함수

async function() { return "id" }

const users = async() => { return "id" }

// 결과는 같습니다.

비동기 함수를 만들기 위해서는 단순하게 함수 앞에 async를 붙여서 일반 함수를 async 함수로 만들면 됩니다.

사실 위 함수를 실행시키게 되면 단순히 일반 함수처럼 값을 반환하는 것이 아니라 async()가 Fulfiled Promise를 반환하게 됩니다.

user().then(("id") => console.log("id"))

위 async함수는 위의 Promise함수와 같다고 볼 수 있습니다.

 

 

 

3. Async & Await를 사용한 api 호출

import axios from "axios";

export default function Nav() {

// 통신 받아 올 nav data
const [nav, setNav] = useState();

useEffect(() => {
    const fetchData = async () => {
      try {
        const result = await axios.get(`public/Data/NavData.json`);
        setNavli(result.data.data.nav_data);
      } catch (error) {
        console.log(error);
      }
    };
    fetchData();
  }, []);
  
}

axios를 통해 비동기적으로 api를 호출할 수가 있습니다.

 

 

 

 

4. Async와 Promise의 차이

 

Promise 사용

fetch('coffee.jpg')
.then(response => response.blob())
.then(myBlob => {
  let objectURL = URL.createObjectURL(myBlob);
  let image = document.createElement('img');
  image.src = objectURL;
  document.body.appendChild(image);
})
.catch(e => {
  console.log('There has been a problem with your fetch operation: ' + e.message);
});

 

Async 사용

async function myFetch() {
  let response = await fetch('coffee.jpg');
  let myBlob = await response.blob();

  let objectURL = URL.createObjectURL(myBlob);
  let image = document.createElement('img');
  image.src = objectURL;
  document.body.appendChild(image);
}

myFetch()
.catch(e => {
  console.log('There has been a problem with your fetch operation: ' + e.message);
});

 

처음에 언급했던 Promise의 단점이란, Promise의 결과로 then()을 사용해 또다른 Promise를 호출하게 되면 Promise Chain이 생기게 되고 이는 길고 복잡한 문장으로 이루어지게 됩니다.

Async를 사용할 경우 좀더 직관적으로 코드를 이해할 수가 있게 됩니다.

 

 

 

반응형
저작자표시 변경금지 (새창열림)

'FrontEnd > React 심화' 카테고리의 다른 글

[React] Redux Toolkit 사용법  (1) 2022.09.19
[React] Redux 사용하기(2) - 카운터 구현  (0) 2022.06.21
[React] Redux 사용하기(1) - 개념과 흐름  (0) 2022.06.21
[React] Immer (produce)  (0) 2022.04.04
[React] Promise란?  (0) 2022.03.07
    'FrontEnd/React 심화' 카테고리의 다른 글
    • [React] Redux 사용하기(2) - 카운터 구현
    • [React] Redux 사용하기(1) - 개념과 흐름
    • [React] Immer (produce)
    • [React] Promise란?
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바