async/await

SIMJAE·2023년 3월 14일
0

자바스크립트

목록 보기
1/4

JavaScript는 싱글 스레드 언어입니다. 이 말은 하나의 작업만을 동시에 처리할 수 있다는 것입니다. 하지만 JavaScript는 이러한 한계를 극복하기 위해 비동기 처리를 지원합니다. 비동기 처리란, 어떤 작업이 끝날 때까지 기다리지 않고 다른 작업을 처리할 수 있는 것을 말합니다.

비동기 처리를 위한 방법으로는 콜백, 프로미스, async/await 등이 있습니다. 콜백은 함수의 인자로 다른 함수를 전달하여 비동기 작업이 끝나면 호출되는 방식입니다. 프로미스는 비동기 작업을 수행하고, 성공 또는 실패 시 콜백 함수를 호출하는 객체입니다. async/await는 ES8에서 추가된 문법으로, async 함수를 사용하여 비동기 작업을 처리하고 await 키워드를 사용하여 결과를 기다리는 방식입니다.

async/await는 프로미스보다 간단하게 비동기 작업을 처리할 수 있으며, 가독성이 좋아서 코드를 이해하기 쉽습니다.
예를 들어, 비동기 작업을 순서대로 처리할 때 프로미스를 사용하면 then 메서드를 연속해서 사용해야 하므로 코드가 길어집니다. 그러나 async/await를 사용하면 코드가 간결해집니다.


const fetchData = async () => {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    const transformedData = await transformData(data);
    const filteredData = await filterData(transformedData);
    const sortedData = await sortData(filteredData);
    const formattedData = await formatData(sortedData);
    return formattedData;
  } catch (error) {
    console.error('데이터 가져오기 중 오류가 발생했습니다.', error);
    throw error;
  }
};

const transformData = async (data) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      const transformed = data.map((item) => ({
        id: item.id,
        name: item.name.toUpperCase(),
        description: item.description.toLowerCase(),
      }));
      resolve(transformed);
    }, 1000);
  });
};

const filterData = async (data) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      const filtered = data.filter((item) => item.name.includes('EXAMPLE'));
      resolve(filtered);
    }, 1000);
  });
};

const sortData = async (data) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      const sorted = data.sort((a, b) => a.id - b.id);
      resolve(sorted);
    }, 1000);
  });
};

const formatData = async (data) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      const formatted = data.map((item) => `${item.id} - ${item.name} - ${item.description}`);
      resolve(formatted);
    }, 1000);
  });
};

(async () => {
  const result = await fetchData();
  console.log(result);
})();

이러한 개념을 이해한 뒤에는, 위와 같은 async/await 예제를 살펴보면서 이해할 수 있습니다. 예제에서는 async 함수를 사용하여 비동기 작업을 처리하고, await 키워드를 사용하여 결과를 기다리는 것을 볼 수 있습니다. 이를 통해 코드의 가독성을 높이고, 비동기 작업을 보다 쉽게 처리할 수 있습니다.

profile
인생은 develop

0개의 댓글