JS비동기 처리 - async / await

guddls ju·2022년 11월 3일
0
post-thumbnail

📢동기 VS 비동기

동기 : 요청을 보낸 후 해당 응답을 받아야 다음 동작을 실행(ex.은행)
비동기 : 요청을 보낸 후 응답에 관계 없이 다음 동작을 실행(ex.카페)

JavaScript는 싱글스레드를 사용하는 동기적 언어이다.

그러나 비동기적 처리를 할 수 없는건 아니다. JS자체는 동기적이지만 브라우저의 구성 요소들이 비동기 특성을 제공하기 때문이다.


🎈JS에서 비동기처리란?

특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고, 순차적으로 다음 코드를 먼저 실행하는 것 (ex Ajax, setTimeout)

비동기처리가 필요한 이유는 api통신을 하며 가장 많이 느꼈는데, 데이터를 아직 가지고 오지 않은 상태에서 출력을 하려고 하면 오류가 발생하기 때문이다.

예시)

function apiGetItem(itemNum: number) {
  const res = axiosInstance.post('', {
    method: 'get',
    params: {
      n: itemNum,
    }
  });
  return res.data.Item;
}

위와 같은 함수를 통해 특정값을 api 호출을 통해 가져왔을 올때 만약 데이터가 아직 res에 담기지 않았는데 출력해버린다면 오류가 발생한다.

이럴 때 JS에서는 async / await 비동기처리 패턴을 사용하여 오류를 해결할 수 있다.


🌠async / await

JS 최신 비동기 처리 패턴으로 사용법이 간단하고 이해하기도 쉽다.

function 키워드 앞에 async만 붙여주면 되고 비동기로 처리되는 부분 앞에 await만 붙여주면 된다.

  • async가 붙은 함수는 프라미스를 반환하고, 프라미스가 아닌 것은 프라미스로 감싸 반환한다.
  • await 키워드를 만나면 프라미스가 처리(settled)될 때까지 기다린다.

예시)

async function apiGetItem(itemNum: number) {
  const res = await axiosInstance.post('', {
    method: 'get',
    params: {
      n: itemNum,
    }
  });
  return res.data.Item;
}

async 함수를 선언하고 res에 데이터를 담는 api 호출 코드에 await를 붙여주면 데이터가 오는 동안 기다렸다가(비동기처리) 데이터가 담기면 res를 리턴하게 된다.

profile
효율에 미친자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN