[typescript] 비동기 이터레이션과 await for...of 문을 사용한 데이터 그루핑 방법

비동기 작업을 처리하면서 데이터를 그룹화하는 과정은 자주 발생합니다. TypeScript에서는 이를 수월하게 처리할 수 있도록 await for...of 문과 Map을 활용하여 구현할 수 있습니다. 이번 블로그에서는 이러한 데이터 그루핑 방법에 대해 알아보겠습니다.

목차

비동기 이터레이션과 await for…of 문

for...of 문은 동기적으로 배열이나 이터러블 객체를 순회할 수 있습니다. 그러나 await 키워드를 사용하여 비동기적으로 이터러블 객체를 순회할 수 있는 for...of 문을 사용할 수 있습니다. 예를 들어, for await...of 구문을 사용하여 비동기 이터레이션을 수행할 수 있습니다. 아래는 for await...of 문을 사용하여 비동기 이터레이션을 하는 예시입니다.

async function processAsyncData() {
  const asyncIterable = getAsyncIterableData(); // 비동기 이터러블 가져오기
  for await (const item of asyncIterable) { // asyncIterable을 비동기적으로 순회
    // 비동기적으로 각 아이템 처리
  }
}

데이터 그루핑 예시

이제 await for...of 문을 사용하여 데이터를 그룹화하는 방법을 살펴보겠습니다. 아래 예시는 Promise를 반환하는 비동기 함수를 실행하고, 각 결과를 특정 키에 따라 그룹화하는 예시입니다.

async function groupAsyncDataByKey(asyncIterable: AsyncIterable<any>, getKey: (item: any) => string) {
  const resultMap = new Map<string, any[]>();
  for await (const item of asyncIterable) {
    const key = getKey(item);
    if (!resultMap.has(key)) {
      resultMap.set(key, []);
    }
    resultMap.get(key).push(item);
  }
  return resultMap;
}

// 사용 예시
async function main() {
  const asyncIterableData = getAsyncIterableData(); // 비동기 이터러블 가져오기
  const groupedData = await groupAsyncDataByKey(asyncIterableData, (item) => item.groupKey);
  console.log(groupedData);
}

위 예시에서 groupAsyncDataByKey 함수는 비동기 이터러블을 받아서 특정 키에 따라 데이터를 그룹화하여 Map으로 반환합니다.

결론

이번 블로그에서는 TypeScript에서 await for...of 문을 사용하여 비동기 이터레이션을 수행하고, 데이터를 특정 키에 따라 그룹화하는 방법에 대해 살펴보았습니다. 이를 통해 데이터 그룹화를 위한 복잡한 비동기 작업을 간단하게 처리할 수 있습니다. TypeScript의 강력한 비동기 처리 기능을 활용하여 프로젝트에서 유용하게 활용해보시기 바랍니다.

참고 자료