Web-Frontend/JavaScript

[JS] async & await

서노리 2023. 1. 5. 01:15
반응형

async & await

콜백 지옥 현상을 해결하기 위해서 프로미스로 비동기 처리를 하더라도 여러 개의 프로미스가 then을 통해 체이닝되며 코드의 가독성이 저하되는 것을 알 수 있다. 이때, async와 await를 사용하여 더욱 편리하고 가독성있는 코드를 작성할 수 있다.

 

async와 await 사용법

  • 함수 앞에 async를 붙이면 해당 함수는 자동적으로 프로미스를 반환하는 함수가 됨
  • 비동기로 처리되는 부분에 await를 붙이면 해당 프로미스가 끝날 때까지 대기 (동기적으로 처리)
  • await은 async가 붙은 함수 안에서만 사용 가능

 

async 사용 예제

function helloAsync() {
  return new Promise((resolve) => {
    resolve("helloAsync");
  });
}

helloAsync().then(console.log);

// helloAsync

위와 같이 프로미스를 사용하여 작성된 코드를 async를 사용하여 다음과 같이 바꿀 수 있다.

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

helloAsync().then(console.log);

// helloAsync

async가 붙은 함수는 해당 비동기 작업 객체 프로미스의 resolve 결과를 리턴하게 된다.

즉, 위 코드에서 "helloAsync"를 인자로 resolve 함수를 수행한 결과를 리턴하는 것이다.

 

await 사용 예제

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

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

helloAsync().then(console.log);

// helloAsync

프로미스를 이용하여 3초 후에 "helloAsync"를 출력하는 코드이다. await을 이용하여 다음과 같이 바꿀 수 있다.

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

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

helloAsync().then(console.log);

// helloAsync

await을 사용하면 then을 사용하지 않고 더 간결하게 비동기적인 코드를 동기적으로 처리할 수 있다.

await은 async가 붙은 함수 안에서만 사용 가능하다.


 

반응형

'Web-Frontend > JavaScript' 카테고리의 다른 글

[JS] 배열, 객체 복사 방법  (0) 2023.01.29
[JS] fetch 메소드로 API 호출하기  (0) 2023.01.15
[JS] 프로미스(Promise)  (0) 2023.01.05
[JS] 동기와 비동기  (0) 2023.01.04
[JS] 자바스크립트 문법 확장  (0) 2023.01.04