자바스크립트 async 함수의 반환 값

자바스크립트에서 async 함수는 비동기적으로 실행되는 함수입니다. 이 함수는 await 키워드를 사용하여 비동기 작업의 완료를 기다릴 수 있습니다.

하지만 async 함수의 반환 값에 대해서는 몇 가지 주의해야 할 점이 있습니다.

1. Promise 객체

async 함수는 항상 Promise 객체를 반환합니다. 이 Promise 객체는 함수의 비동기 작업이 완료되었을 때 결과값을 갖게 됩니다.

async function getData() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return data;
}

getData().then(result => {
  console.log(result); // 비동기 작업의 결과 값
});

위의 예시에서 getData 함수는 fetch 함수를 호출하여 데이터를 가져오는 비동기 작업을 수행합니다. 이 함수는 await 키워드를 사용하여 fetch 함수의 완료를 기다린 후, 데이터를 가져와 반환합니다. 반환 값은 Promise 객체로서 then 메소드를 통해 비동기 작업의 결과 값을 얻을 수 있습니다.

2. thenable 객체

async 함수는 Promise 객체를 반환하지만, 네이티브 Promise 객체뿐만 아니라 then 메소드를 가진 다른 thenable 객체를 반환할 수도 있습니다.

async function fetchData() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return {
    ...data,
    timestamp: new Date()
  };
}

fetchData().then(result => {
  console.log(result); // { ..., timestamp: 현재 시간 }
});

위의 예시에서 fetchData 함수는 fetch 함수를 통해 데이터를 가져온 다음, 가져온 데이터에 현재 시간을 추가하여 반환합니다. 반환 값은 객체로서 네이티브 Promise 객체가 아니라도 then 메소드를 가진 객체라면 비동기 작업의 결과 값으로 사용할 수 있습니다.

3. 오류 처리

async 함수 내에서 발생한 오류는 Promise의 reject 상태로 처리됩니다. 이는 try-catch 구문을 사용하여 오류를 처리하는 것과 유사한 방식입니다.

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
  } catch (error) {
    console.log(error); // 오류 내용 출력
    throw new Error('데이터를 가져오는 중에 문제가 발생했습니다.');
  }
}

fetchData().catch(error => {
  console.log(error.message); // 오류 메시지 출력
});

위의 예시에서 fetchData 함수는 fetch 함수를 통해 데이터를 가져오는데, 만약 오류가 발생하면 catch 블록에서 오류를 처리하고 에러 메시지를 출력합니다.

async 함수를 사용할 때는 오류 처리에 대한 설정을 잘 고려해야 합니다.

결론

async 함수의 반환 값은 항상 Promise 객체이며, thenable 객체를 반환할 수도 있습니다. 오류 처리를 통해 비동기 작업 중 발생하는 문제를 적절히 처리할 수 있습니다. async 함수를 사용하면 비동기 작업을 보다 간편하게 처리할 수 있으며, 반환 값에 대한 이해를 통해 완벽한 비동기 코드를 작성할 수 있습니다.